요즘 NOSQL이라는 말이 많이 뜨고 있다. 개인적인 생각으로는 NOSQL이라는 단어는 다분히 낚시성 단어로 들린다. 왜냐면 NOSQL이라는 단어가 NOSQL이라고 지칭되는 DB 시스템의 특징을 전혀 대변하고 있지 않기 때문이다.
NOSQL을 이야기 하기 전에 대용량 분산 저장 시스템계의 아주 유명한 이론인 CAP 이론에 대해서 알아둘 필요가 있다.
CAP의 각 문자가 의미하는 바는 아래와 같다.
C(Consistency) : 모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다.
A(Availability) : 몇몇 노드 다운이 다른 정상 노드들이 작동하는데 악영향을 끼치지 말아야 한다.
P(Partition Tolerance) : 몇몇 메시지 손실에도 시스템은 정상 동작을 해야 한다.
분산 컴퓨팅 시스템은 위 세가지를 동시에 절대 만족하지는 못하고, 두 가지만 만족한다는게 CAP 이론이다.
일단 P는 거의 모든 웹 서비스에서 반드시 만족해야 만 하는 것이니 선택을 한다고 하면, 이제 두개가 남는데, C와 A 둘중에 어느것을 선택하느냐에 따라서 NOSQL로 가느냐 RDBMS로 가느냐를 결정하는 것이다.
만일 C를 선택한다면 이 서비스는 트렌젝션에 대해서 민감하게 반응해야 하는 금융서비스와 같은 것이여야만 한다. 하지만 웹 서비스의 경우 예를 들어 트위터 서비스는 사실 그럴 필요가 없으며 차라리 몇몇 노드가 다운 되더라도 정상적인 것처럼사용자에게 살짝 에러 메시지를 보여주도 다시 시도 하게끔 하는게 낫다. 게다가 트위터나 페이스북과 같은 서비스는 대규모 그래프 연산이 상당히 많이 일어나는 서비스여서 RDBMS로는 수많은 조인 연산을 해야만 한다. 따라서 RDBMS는 적절하지 않고 이때문에 이들 서비스들이 NOSQL로 가게 된 것이다.
개인적인 생각으로 NOSQL이든 RDBMS든 모두 그들만의 쓰임새가 있다고 생각한다. 역시나 절적하게 자신의 서비스에 뭐가 제일 적절한지 잘 고려해서 선택하는게 가장 현명하다는 것이다.
NOSQL과 CAP Theorem by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.