Oracle이나 Ms SqlServer같은
RDBMS는 대부분 많이들 알고 있겠지만
Document Oriented Database라는 개념은 생소한 분이 많을 것이다.
작년에 처음
Apache 재단의 couchDB를 접하면서 Document-Oriented라는 개념을 처음 접하게 되었는데,
그때 당시 인큐베이팅 프로젝트 이었기 때문에 영글 때(?)만 기다리고 있었더랜다.
그러다 우연히 웹서핑 중
mongoDB라는 녀석을 접했는데..
어랏.. 이녀석도 Document-Oriented DB...
요새 웹 애플리케이션쪽에 심플함을 장점으로 하는 RESTful이 인기를 얻더니,
Document-Oriented DB프로젝트들이 덩달아 인기를 얻나 보다.
이제쯤 Document-Oriented DB를 한 번 정리해줘야 할 필요성을 느낀다.
그렇다면, Document-Oriented DB란 무엇인가..
여기서 말하는 Document란 쉽게 말해
JSON객체를 떠올리면 딱이다.
var doc = {
title: "글 제목이야"
body: "이 쪽은 본문이구..."
create_on: "2009-07-01"
}
이런 형식을 그대로 DB에 집어 넣는다.
기존에 RDBMS를 다루던 사람이라면 Table을 Collection에, Record를 Document에 대응해 생각하면 좀 더 빨리 이해가 될 것 같다.
RDBMS랑 다른게 없어 보이는데?
RDBMS에서는 위와 같은 데이터를 집어 넣기 위해서는 미리 구성되어 있는 테이블이 있어야 하고
title, body, create_on 이라는 필드가 있어야 한다.
하지만 Document-Oriented DB에서 schema-free개념은 그런 정해져 있는 테이블과 필드가 없다.
최초의 문서를 insert하면 그 문서 schema에 해당하는 collection이 자동으로 만들어진다.
그렇기 때문에 create table, drop table 같은 DDL이 없다.
더더욱 황당한 것은 DML(select, insert, update, delete)까지 없다..!! @ㅁ@
DBA가 보면 "이거 뭔 잡.. 우짜라고!!" 소리가 절로 나올터이다.
하지만 애플리케이션 개발자 입장은 어떨까?
Document-Oriented DB들은 DML 대신에 각 언어별로 API를 제공하고 있다.
언어를 불문하고 일반적이 객체를 다루는 문제라 배우기도 무척 간단하다.
(아쉽게도 mongoDB의 경우 현재까지는 .NET의 API는 제공 하지 않고 있지만,
Java, Python, Ruby, PHP 등의 왠만한 언어는 다 지원되고 있는 것으로 보아 조망간 .NET용도 나올 것으로 예상된다.)
간단하게 자바용으로 제작된 API의 Tutorial을 한 번 보면 금방 쉽게 이해가 갈 것이다.
잠깐 보고 오길 바란다.
(나 .NET개발자야... 하며 떨고 있지 말고 냉큼 눌러보자!)
http://www.mongodb.org/display/DOCS/Java+Tutorial
감상이 어떠한가?
Java 개발자: "이거
Hibernate를 써도 비슷하게 구현 가능한거 같은데?"
.NET 개발자: "
ADO Entity Framework쓰면 됨."
맞다.
요새 Java고 .NET이고 너나 없는 DB Layer딴의 구성은
ORM이 유행이다.
하지만
드라군Document-Oriented DB가 출격하면 어떻게 될까?
Hibernate, ADO Entity Framework고 나발이고 다 필요 없어지는거다.
n-tier 로 구성된 프레임웍이라면 DB layer는 날로 먹고 들어갈 수 있는거다.
(극단적인 표현이긴 하다.. ^^;;; 위 두 프레임웍이 ORM만을 위해서만 있는 것은 아니니..)
couchDB의 경우는 여기서 한 발 더 나아가 설치시에 웹서버가 같이 설치 되어
Client와 HTTP로 통신하고 Data(Document)를 JSON으로 주고 받는다.
이거 뭔가 RESTful한 냄세가 나지 않나?
그렇다! 바로 그거다..!
couchDB를 쓰면 HTML과 Javascript만으로도 웹 애플리케이션 제작이 가능하다는 소리다.
Document-Oriented DB 를 사용함으로써 프로젝트가 얼마나 유연해지고
잔일손이 줄지 생각하는 것만으로도 짜랏하지 않은가?
애플리케이션 제작의 패러다임이 바뀌고 있다..!!!
그렇다면 성능은?
http://www.snailinaturtleneck.com/blog/?p=74
여기서 보면 전반적으로 erlang으로 만들어진 couchDB보다는 C++로 제작된 mongoDB가 더 나은 성능을 보여주는데
mongoDB의 경우 100만건의 insert처리 시간은 약 18초 이다.
http://www.codeweblog.com/couchdb-vs-mysql-insert-performance-test-data-of-the-speed-test/
이곳에서는 couchDB와 open source DB의 대표주자 mysql의 성능 비교를 보여주는데..
그 결과는 참담하기 이를대 없다. ㅡ,.ㅡ;;
상황이 이쯤되니 Oracle같은 DB와의 비교는 무의미 하려나..
여튼 벤치마크 자료를 찾을 수가 없다.
아직은 couchDB나 mongoDB로 엔터프라이즈 프로젝트를 진행하기에는 성능상 이슈가 클 듯하다.
하지만 아직 이 두 젊은 DB의 버젼은 1.0에도 이르지 못했다.
이는 아직 못다 이룬 성능 향상이 많이 남아 있다는 말일게다.
또 과거에 성능때문에 주저 앉아 버렸던 프로젝트들이 하드웨어의 발전과 함께 빛을 보는 경우도 허다 하지 않은가..
본인은 이 두 DB들이 주는 제작의 편리함 때문에 그에 거는 기대가 사뭇 크다.
끝으로 실제로
RubyOnRails + mongoDB를 사용하여 만들었다는 국내 서비를 소개하며 갈무리 할까 한다.
혹 프로그램에 관심이 없더라도 야구에 관심히 있다면 한 번 찾아가보기 바란다.. ^^
http://basegoo.com/