MySQL이나 SQLite와 같은 RDBMS (Relational DBMS)는 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장한다는 것을 알 수 있다. 이는 복잡할 뿐만 아니라, 저장해야 하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있다. 이를 해결하기 위해 등장한 것이 비관계형 데이터베이스 즉, **Non-Relational DBMS (NRDBMS, NoSQL)**이다.
관계형 데이터베이스에서 발생할 수 있는 문제점으로는 SQL Injection이 있다. 공격자는 이를 통해 데이터베이스의 정보를 알아내거나 임의의 결과를 반환해 인증을 우회하는 등의 행위가 가능하다. NoSQL 또한 이용자의 입력 값을 통해 동적으로 쿼리를 생성해 데이터를 저장하기 때문에 이와 같은 문제점이 발생할 수 있다.
RDBMS는 SQL을 사용해 데이터를 조회 및 추가 그리고 삭제할 수 있다. NoSQL은 SQL을 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간인 것이 큰 특징이자 RDBMS와의 차이점이다. 이 외에도, 키-값을 사용해 데이터를 저장하는 차이점이 존재한다.
RDBMS는 SQL이라는 정해진 문법을 통해 데이터를 저장하기 때문에 한 가지의 언어로 다양한 DBMS를 사용할 수 있다. 반면에 NoSQL은 Redis, Dynamo, CouchDB, MongoDB 등 다양한 DBMS가 존재하기 때문에 각각의 구조와 사용 문법을 익혀야 한다는 단점이 있다.
NoSQL 유래 NoSQL은 Not Only SQL로 통용되어 사용되고 있다. Not Only SQL은 SQL을 사용하지 않고 데이터를 다룰 수 있다는 의미를 가진다.
MongoDB는 JSON 형태인 도큐먼트(Document)를 저장하며, 다음과 같은 특징을 갖고 있다.
용어의 차이
| RDBMS | NoSQL (MongoDB 기준) |
|---|---|
| Table | Collection(데이터베이스의 하위에 속하는 개념) |
| Row | Document |
| Column | Field |
| Query | Query (MQL) |