본문 바로가기

Development/SQL

[SQL] SQL과 NoSQL의 비교

728x90

 

SQL Logo

 

AWS의 데이터베이스의 종류가 무엇이 있는지 조사중에 SQL과 NoSQL을 선택해야 하는 기로의 순간이 왔다.

 

SQL과 NoSQL은 시대가 지나면서 사용 빈도가 많이 바뀌었다.

[출처] https://www.researchgate.net/profile/Badir-Hassan/publication/327906267/figure/fig1/AS:675399990251527@1538039314807/Google-trends-using-NoSQL-versus-SQL-terms.png

위 그림을 보면 처음에는 당연히 SQL을 많이 사용하고 있었지만 시간이 지날수록 NoSQL의 성장세가 무서운 것을 알 수 있다. 이렇게 NoSQL의 성장세가 무서운 이유는 2010년도 이후부터 인터넷을 통한 서비스가 증가하면서 기존의 RDBMS로는 대규모의 서비스를 감당할 수 없다. 이로 인하여 나타난 것이 오픈 소스 프로젝트인 MongoDB, Cassandra 등이다. 

SQL은 우리가 아는 RDBMS(Relational DataBase Management System)를 말하는 것이었다. 

 

수직적 확장성(Vertical Scalability)과 수평적 확장성(Horizontal Scalability) (확장성)

수직적 확장성(Vertical Scalability)은 RDBMS의 엔진을 갖고 있는 머신의 성능을 더 좋게 만들어주는 것이다.  예를 들어 SSD가 1개인데 여러 개 더 구입하여 장착한다든지 또는 CPU를 더 좋은 것으로 바꾼다는 등의 예시가 존재한다. 하나의 컴퓨터를 업그레이드 하는 데는 비용이 많이 들고, 손이 많이 간다. 그리고 확장성 측면에서 비용이 많이 발생하는 이유는 보통의 회사에서 DBA 분들이 DB를 옮길 때 Schema를 만들고 동기화를 시키고 하는 이러한 작업들이 비용을 발생시키는 부분이다. 

NoSQL이 가지고 있는 장점이 바로 수평적 확장성이다. 수평적 확장성이란 서버의 수를 늘려서 확장성을 달성한다. 단순히 서버를 늘리기만 하면 Scale이 비례하여 늘어난다. 이로 인해 응답 속도는 어느 정도 보장이 된다.

스루풋(Throughput) 이란?

스루풋(Throughput) 또는 처리율(處理率)은 통신에서 네트워크 상의 어떤 노드나 터미널로부터 또 다른 터미널로 전달되는 단위 시간당 디지털 데이터 전송으로 처리하는 양을 말한다. 예를 들어 데이터 링크에서는 스루풋 단위로 초당 비트 수(bit/s 또는 bps)가 주로 사용된다.

[출처] https://ko.wikipedia.org/wiki/스루풋

 

SQL vs NoSQL (쿼리 언어 여부)

기본적으로 SQL 언어는 거의 다 비슷하다. 몇가지 다른 점이 있긴 하지만 크지 않다.

만약 여러분의 데이터베이스가 Join을 많이 해야 하는 데이터임에도 불구하고 NoSQL을 쓰지 않았으면 좋겠다. Join을 많이 해야 하는 상황이라면 SQL을 쓰는 것이 맞다. User 데이터나 User의 Transaction 데이터 그리고 상품 데이터 같은 정형화된 데이터들은 SQL을 쓰는 것이 맞다.

반대로, Facebook처럼 User가 폭발적으로 증가하는 상황이나 간단한 데이터들로만 이루어진 데이터베이스는 주로 NoSQL을 쓰는 것이 맞다고 생각한다.

 

강한 스키마 vs 자유로운 스키마 (스키마 유연성)

SQL은 필드에 값을 추가할 때 형식이 다른 데이터가 추가가 되면 에러가 발생한다. 하지만 NoSQL은 형식이 다른 데이터 추가가 되면 새로운 필드를 만들고 그 값에 추가한다. 하지만 이렇게 값이 계속해서 추가가 되기 때문에 생각 없이 만들다 보면 데이터베이스가 지저분해지므로 주의해야 한다. 

RDBMS에는 Index라는 것이 존재하는데 특정 값을 찾는데 걸리는 시간은 Binary Search를 사용하게 되면 찾는 데 걸리는 시간은 log n이다. 

NoSQL의 경우는 탐색하는 데 걸리는 시간이 RDBMS 보다는 많이 걸린다. 그러므로 최대한 키를 중심으로 쿼리를 날리는 것이 중요하다.

그러므로 여러분이 Index를 찾거나 Foreign Key를 중심으로 찾을 때는 RDBMS로 가는 것이 좋다.

 

정리

SQL vs NoSQL

 

SQL vs MongoDB Terminology

728x90

'Development > SQL' 카테고리의 다른 글

[SQL] PostgreSQL 설치 및 접속  (0) 2021.06.24
[SQL] 관계(Relationship)의 이해  (0) 2020.05.21
[SQL] 엔터티(Entity)의 이해  (0) 2020.05.18
[SQL] 데이터 모델의 이해  (0) 2020.05.18
[SQL] 데이터베이스의 개요  (0) 2020.05.05