
지난달 개최된 MongoDB World 컨퍼런스에서 MongoDB 창립자이자 CTO인 엘리엇 호로위츠(Eliot Horowitz)는 2.8 릴리스에 포함될 예정인 플러그형 스토리지 엔진(pluggable storage engine) 지원 계획을 발표했습니다. 이는 매우 흥미로운 소식입니다. 사용자는 자신의 워크로드에 가장 적합한 스토리지 엔진을 자유롭게 선택할 수 있고, 해당 API는 모든 MongoDB 기능을 완전히 지원하도록 설계되어 기존에 누리던 기능을 하나도 포기하지 않아도 되기 때문입니다.
여기서 더욱 주목할 점은 동일한 레플리카 셋(replica set) 내의 노드들이 서로 다른 스토리지 엔진을 사용할 수 있다는 것입니다. 이를 통해 다양한 요구 사항에 맞춘 유연하고 흥미로운 구성이 가능해집니다.
오픈소스라서 가능한 실험
MongoDB가 완전한 오픈소스 프로젝트라는 점이 큰 장점입니다. 2.8 버전이 정식 출시될 때까지 기다릴 필요 없이, 지금 바로 이러한 실험적 기능들을 사용해 볼 수 있습니다. GitHub에서 MongoDB 전체 소스 코드를 클론한 뒤, 현재 개발 중인 실험적 기능을 포함하여 직접 컴파일하면 됩니다.
아래 예제에서는 MongoDB World에서 시연된 RocksDB 예제 스토리지 엔진을 활성화하여 MongoDB를 빌드하는 과정을 단계별로 살펴보겠습니다.
빌드 환경 준비하기
새로 설치한 CentOS 6.5 클라우드 인스턴스를 기준으로, 먼저 기본 의존성 패키지를 설치합니다:
$ yum groupinstall 'Development Tools'
$ yum install git glibc-devel scons다음으로 GitHub에서 MongoDB 소스 코드를 가져옵니다:
$ git clone https://github.com/mongodb/mongo.gitRocksDB 지원과 함께 컴파일하기
이제 RocksDB 지원을 활성화하여 소스를 컴파일하는 일만 남았습니다:
$ scons --rocksdb=ROCKSDB mongo mongod컴파일 속도를 높이고 싶다면 -j 옵션으로 병렬 작업 수를 지정할 수 있습니다. 컴파일하는 동안 시스템을 전적으로 할애할 계획이라면, 머신의 코어 수 + 1을 지정하는 것이 좋은 기준입니다. 필자의 경우 다음과 같이 실행했습니다:
$ scons -j 17 --rocksdb=ROCKSDB mongo mongod실험적 기능임을 감안해야 할 점
주목할 점은 플러그형 스토리지 엔진 지원과 RocksDB 엔진이 아직 완전히 실험적인 단계라는 것입니다. 따라서 master 브랜치에서 컴파일하다가 오류를 만나거나 빌드에 실패할 가능성이 충분히 있으며, 이 단계에서는 어쩔 수 없는 부분입니다. 진행 상황을 지속적으로 확인하고 싶다면 MongoDB 개발자 메일링 리스트(dev mailing list)를 살펴보는 것이 좋은 출발점입니다.
새 스토리지 엔진으로 mongod 실행하기
컴파일이 완료되면 새롭게 추가된 --storageEngine 파라미터를 사용해 mongod 프로세스를 시작합니다:
$ ./mongod --storageEngine rocksExperiment마지막으로 데이터베이스에 접속해 간단한 도큐먼트를 삽입한 뒤 db.stats()를 실행하면 모든 것이 정상 작동하는지 확인할 수 있습니다. 모든 과정이 순조롭게 진행되었다면 RocksDB 관련 통계 정보가 반환되는 것을 볼 수 있습니다.
마무리하며
이처럼 실험적 기능을 활성화한 상태로 개발 환경을 구축하고 실행하는 것은 생각보다 훨씬 간단합니다. 2.8 릴리스가 다가올수록 플러그형 스토리지 엔진 코드가 어떻게 성숙해가고, 어떤 새로운 스토리지 엔진들이 추가로 발표될지 지켜보는 일이 무척 기대됩니다.