본문 바로가기

Technical/Development

Lightweigh DB - Linux에서 MongoDB c++ 어플리케이션 개발하기


개발도구는 Sun Studio 12.1 로 해 보자(NetBeans 6.8도 가능)
개발을 위한 컴파일러는 gcc 4.1* 이상이어야 한다.

우선 mongoDB 다운로드 & 설치
- www.mongodb.org 에서 mongodb binary 또는 소스를 받아서 설치한다
- 소스 설치시는 의존성에 걸리는 빌드도구들을 여러가지 받아서 설치해야한다. 특히 scons 가 필수인데
   Ubuntu, centOS에서는 숫한 삽질을 통해 scons 소스를 컴파일해서 빌드한 기억이 난다.
   우여곡절 끝에 mongodb를 다음과 같이 빌드할 수 있다
   # scons --prefix /usr/service/mongo install
- mongodb 는 rpm 같은 패키징이 없이 tar.gz binary 압축해제/복사 또는 source 컴파일후 위에서 처럼 빌드, 설치
  2가지중 하나를 선택해야 한다.

mongodb 를 사용하는 프로그램을 컴파일 하기 위해서 필수적인 라이브러리가 바로 c++ boost library이다.
CentOS에서는 yum install boost, yum install boost-devel 로 설치할 수는 있지만
아쉽게도 boost 버전이 1.33이라 mongo 어플리케이션을 컴파일할 수가 없다. 그렇다면? boost 소스를 다운받아서
직접 빌드하고 설치해야 한다(이 때도 숫한 삽질이 수반된다). 결론은 Cent에서 mongodb app 개발은 상당한
인내심을 길러주는 극기 훈련이 될테니 마음 단단히 먹기 바란다.
특히 CentOS는 패키지 다운로드를 통해서 받아오는 MySQL이나 boost 등의 어플리케이션들이 상당히
구닥다리들이 많다는 점에 주의 !!

Ubuntu 에서는 그나마 상대적으로 쉬운 편인데 반드시 boost 1.38.1 이상을 설치해줘야 한다.

OpenSUSE 에서는 상당히 간편하게 mongodb 개발이 가능하다. YaST에서 최신버전의 boost 를
받아서 설치해주면 된다. gcc(g++4.4)와 boost 1.40이 설치될 것이다. 잘 모르겠으면 속편하게 소프트웨어
설치에서 왠만한 개발 도구와라이브러리들을 슥슥 선택해서 좌악 깔아주면 된다.

사이트의 샘플 소스를 Copy&Paste 해서 테스트 프로그램을 편집하였다고 하자.
#include <iostream>
#include "client/dbclient.h"

using namespace mongo;

void run() {
  DBClientConnection c;
  c.connect("localhost");
}

int main() {
  try {
    run();
    cout << "connected ok" << endl;
  } catch( DBException &e ) {
    cout << "caught " << e.what() << endl;
  }
  return 0;
}

커맨드라인에서라면 애래와 같이 컴파일 & 빌드를 수행하면 된다.
# g++ mongotest.cc -lmongoclient -lboost_thread-mt -lboost_filesystem -lboost_system-mt -o mongotest
여기서 libmongoclient.a, libboost_thread-mt.so libboost_filesystem.so libboost_system-mt.so 등이 적절히
설치되고 -L 옵션등으로 지정해주거나 LD_LIBRARY_PATH에 추가 하는 등의 작업이 필요함은 물론이다
(플랫폼에 따라 libboost_filesystem-mt.so로 해야 할 수도 있다).

SunStudio 내에서 컴파일&빌드 하려 한다면
Sunstudio 메뉴에서 Tools>Option>C/C++ 설정으로 가서 GNU를 default 로지정하고 저장한다.
Project Properties 에서 컴파일러 옵션에서 Additional Include 디렉토리를 mongodb include 디렉토리로 지정
링크 옵션에서 Add Library로 libmongoclient.a와 boost shared library 3개를 모두 추가하여 야 한다.