NoSQL

개요

단어 뜻 그 자체를 따지자면 Not only SQL로 SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하는 단어이다. 관계형 데이터베이스를 사용하지 않는다는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 것이다. 다시말해, NoSQL이 말그대로 No로 인식해 SQL을 쓰지 않는 것이 아니라 상황에 따라 유동적으로 SQL도 사용할 수 있다는 얘기다. [1]

데이터를 조직하는 방법에는 리스트, 해시, 트리, 그래프 등의 다양한 방법이 있고 각각은 장점과 단점이 명확하기 때문에 단순히 NoSQL 이라고만 해서는 너무 뜬구름 잡는 얘기가 된다. 저 단어는 RDBMS가 데이터베이스의 거의 전부를 차지할 정도로 독점적인 지위를 차지하고 있는 현재 상황에 반발하는 정신을 담고 있다.

NoSQL이라고 하는 말은 No 'English' 라고 하는 말과 마찬가지다. 세상에는 영어 말고도 수많은 언어가 존재한다. MongoDB에서 사용하는 쿼리 언어와 CouchDB에서 사용하는 쿼리 언어는 서로 전혀 다르다. 그럼에도 이 두 쿼리 언어는 같은 NoSQL 카테고리에 속한다. 어쨌거나 SQL이 아니기 때문이다.

참고로 RDBMS는 데이터를 스키마가 있는 리스트로 관리한다. 그리고 그 리스트를 탐색하는 인덱스 자료구조에는 B-tree를 사용한다. 그러나 KV-store의 일종인 Redis는 데이터를 스키마가 '없는' 리스트로 관리하면서 인덱스 자료구조에는 해시를 사용한다. Document DB인 MongoDB는 데이터를 스키마가 없는 리스트로 관리하면서 인덱스로 B-tree를 사용하며 Redis와 달리 다중 인덱스(Secondary index)를 허용한다. Neo4J는 데이터를 노드와 에지를 가진 그래프 자료구조로 표현하며 그에 걸맞는 쿼리 API(Java API)를 제공한다.

NoSQL이 No RDBMS를 의미하지는 않는다. BerkleyDB같은 예외가 있기 때문이다. 그리고 No RDMBS가 NoSQL인 것도 아니다. SQL호환 레이어를 제공하는 KV-store라는 예외가 역시 존재한다. 물론 KV-store의 특징상 range query를 where절에 넣을 수 없으므로 완전한 SQL은 못 되고 SQL의 부분집합 정도를 제공한다.
  1. NoSQL 핵심 가이드(Tatsuya Sasaki), 2011