
NoSQL과 RDBMS의 차이는 무엇일까?
사전지식
- RDBMS의 일종인 MySQL을 사용하여 프로젝트를 진행한 경험이 있다
- RDBMS란 관계형 데이터베이스를 의미하며 테이블 간의 관계설정(외래키) 등을 통해 데이터 조회, 정렬 등의 작업에 유용하다
NoSQL이란?
"Not Only SQL"
- 전통적인 관계형 데이터 베이스가 아닌 다른 형식으로 데이터를 저장하는 DB를 말하며, 비관계형 데이터 베이스라고도 한다.
- RDBMS가 SQL(쿼리언어)기반인 것과 다르게 NoSQL은 데이터베이스마다 데이터 액세스 구문이 다를 수 있다
왜 등장했을까?
- 기존 RDBMS는 열과 행으로 구성된 테이블에 데이터를 저장하고 있다. 이러한 테이블에 데이터를 저장하기 위해서는 테이블의 열(column)에 대한 정보를 미리정해야만 데이터 처리가 가능하며, 이런 데이터베이스의 논리적인 구조를 스키마라고 한다. 즉 RDBMS는 스키마의 사전 정의가 강요되는 데이터베이스라고 이해할 수 있다
- 그러나 현재 데이터의 양, 속도, 다양성(3V)가 늘어나면서 이러한 대용량의 데이터를 처리하기 위한 새로운 데이터베이스가 필요해졌고, NoSQL이 바로 그 역할을 하게 된 것이다.
NoSQL의 장점
- 스키마를 사전에 정의하지 않아도 데이터가 저장될 수 있다. 스키마가 아예 없거나, 있더라도 유연하기 때문에 쉽게 새로운 열을 추가할 수 있고 작업을 진행하는 동시에 데이터를 정의하는 방식으로 빠르게 데이터를 작성할 수 있다.
- 상업용 하드웨어를 사용하여 수평적 확장이 가능하다. 여러 대의 서버에 데이터를 분산하여 저장하기 때문에 데이터가 많아지면 서버를 추가하는 방식으로 쉽게 성능을 높일 수 있다
- 이외에도 대용량 데이터를 빠른 응답시간을 보장하는 고성능의 데이터 베이스라는 점과 가용성, 기능성 등에서 여러가지 장점을 지니고 있다
NoSQL의 단점
- 데이터 간의 관계를 모델링하지 않고, 데이터 중복에 취약점이 있기 때문에 고도로 정규화된 데이터를 다루는 금융, 회계 등의 데이터에 대해서는 사용하기 어렵다.
- 복잡한 쿼리(조인, 하위쿼리 등)를 제공하지 않기 때문에 단일 테이블에 대한 단순 쿼리 등에 적합하다
NoSQL vs RDBMS

- RDBMS: 관계형, 복잡한 질의를 처리할 수 있음, 사전 스키마 정의가 필수적, 데이터 중복 최소화, 정규화 된 데이터, 수직적 확장(하드웨어 성능 향상)
- ex) MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server etc
- NoSQL: 비관계형, 유연한 스키마와 넓은 확장성, 대용량 데이터와 단순 쿼리에 적합, 수평적 확장(서버 추가)
- ex) Redis, MongoDB, CouchDB etc
Ps.
- 팀, 개인 프로젝트 모두 mysql을 사용해서 NoSQL은 사용해본 적이 없었다. 사실 대용량의 데이터를 다루는 프로젝트를 진행한 것은 아니라서 MySQL을 사용한 것이 적합한 방식이었을 거라고 생각이 들기도 하지만 실제로 서비스를 제공하고 있는 기업에서는 NoSQL을 사용하는 경우가 많다고 하니 직접 써보고 싶다는 생각이 들었당
- RDBMS는 설명을 보았을 때 직접 사용한 경험이 있다보니 스키마를 왜 미리 설정해야하는지, 조인이나 복잡한 서브쿼리 등을 어떻게 사용하는 이해가 되었지만 NoSQL은 사용경험이 없어 내가 제대로 이해한 것이 맞는지 긴가민가했다. 특히 공고를 찾아보면서 MongoDB를 자주 보았던 것 같아서 한번 공부해봐야겠다는 생각이 들었다.
참고자료