CouchDB 는 문서-지향(document-oriented) 데이터베이스다. 굳이 문서지향이라고 말하는 이유는 아마도 RDBMS가 아니라는 것을 강조하기 위해서일 것이다. Apache 재단에서 인큐베이팅 중인 이 오픈소스 프로젝트는 현재 알파버전 상태다. 긴 의자(couch)에 앉아 휴식(relax)을 취하고 있는 사람이 그려진 로고가 인상적이다.
내가 이 데이터베이스에 특히 관심을 갖는 이유는 이 DB가 다음과 같은 재미있는 특징들을 갖고 있기 때문이다.
- Erlang으로 작성되었다. (정확하게는 얼랭 OTP 기반 애플리케이션이다)
- 클라이언트와 HTTP/REST 방식으로 통신한다.
- 통신 데이터 포맷으로 JSON을 사용한다.
- 서버측 데이터 처리에 자바스크립트를 기본 언어로 사용한다.
- document와 view라는 개념으로 데이터를 관리한다.
- _id와 _rev 키를 이용하여 문서의 히스토리를 관리한다.
- 고가용성, 장애허용, 데이터 복제 등이 허용되는 클러스터 기반에서 작동한다.
왜 모든 웹서비스에서 RDBMS를 사용해야 할까? 많은 웹 애플리케이션들이 본질적으로는 콘텐츠, 즉 문서 기반에서 작동하고, 결국은 문서를 다루는 것을 주된 목적으로 하고 있다면, '문서-지향' 데이터베이스는 분명 일리가 있다. 그런 의미에서 누군가 CouchDB를 가리켜 '실용주의 데이터베이스'라고 말한 것은 퍽이나 재미있는 비유인 것 같다.

물론 CouchDB와 유사한 개념들은 이미 많이 나와 있다. 가장 먼저 떠오르는 것이 아마존의
SimpleDB일 것이다. 둘 다 문서기반 데이터베이스다. 또 뭐가 있을까? 나는 CouchDB에서 document와 view를 만들다가 꼭 윈도우즈 레지스트리(registry)를 편집하고 있는 것 같다는 느낌을 받았다. 또 있다. 우리나라에는 이미 아주 훌륭한 문서 기반 데이터베이스가 있다. 바로
스프링노트가 그것이다.
deepblue 님의
Slugger는 이 스프링노트를 문서기반 데이터베이스로 사용하여 HTTP/REST로 액세스한다는 측면에서 보자면 CouchDB의 개념과 거의 일치하는 구조를 갖고 있다고 해야 할 것이다. (CouchDB는 이제 겨우 알파버전이지만 스프링노트는 벌써 돌이 지났으니 스프링노트가 형님뻘인 셈이다)
HTTP/REST 방식을 사용하기 때문에, 모든 프로그래밍 언어에서 이 DB에 쉽게 액세스가 가능하다. 레일스라면 약간 수고스럽기는 하지만 액티브리소스(ActiveResource)를 사용하여
더할 나위 없이 편하게 DB에 액세스할 수 있을 것이다. 물론 ActiveCouch나 CouchObject 같은 3rd Party 라이브러리들을 사용할 수도 있고, 직접 HTTP 액세스를 해도 무방하다. 때는 바야흐로 봄이다. 바야흐로 REST 세상인 것이다.
최근 덧글