MongoDB 를 넘어 …
많은 NoSQL 을 사용해봤고, 운영도 했지만, 안정적으로 운영할 NoSQL을 새롭게 찾게 되는 것은 왜일까?
MongoDB 를 무의식적으로 사용하고 있는 나와 동료들에게서 MongoDB로 인한 운영 부담을 덜기 위해, 새로운 대안을 찾는 시기가 왔다.
MongoDB와 기능상에서는 유사하지만, 성능이 더 좋고, 운영 부담이 조금 덜한 Couchbase 부터 시작해서, RethinkDB, ArangoDB 등 많은 후보군을 두고 고민을 하고 있다.
내가 새로운 NoSQL 에 바라는 점은 다음과 같다.
1. 운영이 쉬워야 한다. (Ops 전문가가 부족하기 때문)
2. Replication 과 Sharding 기능이 제공되어야 한다.
3.Write 성능이 MongoDB 이상이 되어야 한다.
4. 조회 시 Latency 뿐 아니라 시스템 부하도 적어야 한다.
5. Secondary Index 가 지원되어야 한다.
6. 기본적으로 Document based storage 가 지원되어야 한다.
이런 점을 기반으로 몇 가지 NoSQL을 선정하고 기술 검토에 들어갔다.
1 RethinkDB (https://www.rethinkdb.com/)
RethinkDB 는 Realtime DB라는 기치로 node 진영에서 인기가 있었던(?) DB이다. 예전부터 알고는 있었지만, Java 를 지원하지 않는 이유로 관심에서 멀어졌던 제품이다. 요즘 다시 찾아보니 많은 일들이 있었네요. 회사는 망하고, 제품은 오픈소스화 되어, Linux 재단에서 지원을 받고 있다고 하네요.
위의 링크는 아마 RethinkDB 제작회사의 CEO가 회사를 접은 이후 쓴 RethinkDB가 왜 실패했는가를 분석한 글입니다.
제가 생각하기에도 초창기 node 진영에 어필은 했지만, 가장 시장이 큰 java 진영을 지원하지 않은 점이 가장 크고, realtime 이라는 기능을 너무 강조한 것이 패착이지 않나 싶습니다.
하지만, 현재 RethinkDB는 Linux 재단의 품으로 들어가 새롭게 제품 개발을 진행하고 있습니다.
2.x 부터는 Java 도 지원하고 (아직 Java 용 자료는 javascript 나 python에 비해 상대적으로 부족합니다만) 다시 활발히 개발이 진행되는 것 같아 급 관심이 갑니다.
RethinkDB 기존 버전은 MongoDB에 비해 성능이 느린 점도 문제점으로 지목되었는데, RethinkDB 2.x 부터는 상당한 개선을 이루어 현재는 성능면에서 MongoDB에 뒤지지 않습니다.
거기다가 다양한 JOIN 지원, Realtime 지원, Cluster 지원 등 MongoDB가 지원하지 않는 기능 및 강력한 질의어 API (ReQL) 을 지원하여, 상당히 강력하고 성능 좋은 조회 기능까지 제공됩니다.
제가 검토하는 현재로서는 RethinkDB 개발진이 더 보강되어, 더 많은 기능이 속도감있게 지원 되었으면 합니다. 오픈소스 중 자금지원을 못 받는 프로젝트의 경우 중간에 중단될 수 있는 위험이 있으니 섣불리 선택할 수 없는 상황이라 무척 아쉽다는 생각이 듭니다.
2. ArangoDB ( https://www.arangodb.com/)
ArangoDB 는 Graph DB를 찾다가 Neo4j, OrientDB 이후에 발견한 제품입니다. 특이하게 Graph DB, Document DB, Key-Value 모두 지원하면서도, 성능면에서도 MongoDB를 뛰어넘는 DB라 소개하고 있습니다.
Benchmark: PostgreSQL, MongoDB, Neo4j, OrientDB, ArangoDB (2015)
2015년 10월에 쓴 글이므로, 현재와는 많이 차이가 있고, ArangoDB에서 자체 수행한 것이라 감안하고 보더라도 ArangoDB의 강점이 분명 있다고 봐집니다.
ArangoDB 또한 Zero Configuration 으로 Cluster를 구성할 수 있고, Cluster의 성능이 다음과 같이 Linear 하다는 게 큰 장점 중에 하나라 봐집니다.

ArangoDB 도 RethinkDB와 유사하게 AQL 이라는 Query Language 를 지원합니다. RethinkDB 는 Java API 라면, AQL 은 SQL의 변종이라 보시면 되겠네요.
최근 출시한 3.2 에서는 Facebook RocksDB 를 저장소로 할 수 있도록 하여, 더욱 성능이 개선되었다고 합니다. 안정된 회사에서 Comercial, Community 버전 모두 지속적으로 지원하여 안정적이라는 점이 잇점을 더합니다.
맺는말
앞으로도 더 많은 제품을 검토할 예정이지만, 조만간 위 두 가지 제품중에 하나를 선택해서 프로젝트를 진행할 생각입니다.
RethinkDB의 불안한 미래 vs 오버스러운 기능의 ArangoDB 중에 선택을 해야겠지요^^
이제 MongoDB 운영 부담을 벗어던지고, 좀 더 강력하고 쾌적한 환경에서 개발할 수 있으면 좋겠습니다.
