본문 바로가기
DB,SQL

php와 mongodb 연동

by violetoz 2014. 3. 5.

과거 포스팅에서 Windows 환경에서 MongoDB 환경을 구축하는 과정에 대해 소개한 바 있습니다. 금번 포스팅에서는 Linux에서 MongoDB를 설치하고, 최종적으로 PHP로 MongoDB에 접근할 수 있는 환경을 구축하는 과정을 소개합니다.

MongoDB의 기본적인 설치방법에 관해서는 공식문서에 잘 정리되어 있습니다만, Path를 설정하고 환경변수를 조정하고 최종적으로 PHP에서 사용할 수 있게 하기까지는 설명에 부족함이 있는 것이 사실입니다. 이번 포스팅에서는 이러한 부분에 이르기까지 모두 모아서 설명하겠습니다.

기본적으로 이곳에서 표시되는 대부분의 코드는 리눅스 명령어입니다. 또한 이곳에서 소개하는 설치과정은 CentOS 6.4를 기준으로 하고 있음을 밝힙니다.

 

Step #1. MongoDB 관리용 계정생성

1
2
useradd mongo
passwd mongo

서버관리자의 스타일에 따라서 불필요하다고 여겨질 수도 있습니다만, 저는 가장 먼저 MongoDB 관리용 계정을 생성하였습니다. 계정명은 알기 쉽게 mongo로 변경하였습니다.

 

Step #2. MongoDB의 다운로드

MongoDB 공식 홈페이지의 Downloads 메뉴에서는 현재의 버전 및 URL을 확인할 수 있습니다. 버전은 일반적으로 Production Release를 선택하면 무방하고, OS는 물론 Linux를 택합니다. 32비트를 설치할지 64비트를 설치할지도 결정합니다.

어떤 것을 다운로드 받을지 결정했다면, 다음으로 해야할 일은 물론 MongoDB를 다운로드 받는 일입니다. 다운로드 받은 파일을 FTP로 전송해도 좋고, curl 라이브러리를 사용해도 좋습니다. 저는 위와 같이 wget 명령어를 이용하여 간편하게 다운로드 받았습니다.

다운로드 받은 이 파일 안에는 몇 가지 저작권 안내문서와 함께, MongoDB를 작동시키는 여러 실행파일들이 들어있습니다. 대표적인 2가지 파일로는 데몬인 mongod와 MySQL처럼 쉘로 접속할 수 있는mongo가 있습니다.

 

Step #3. 압축해제 및 디렉토리 세팅

1
2
3
4
tar xvfz mongodb-linux-i686-2.4.8.tgz
mkdir -p /usr/local/mongodb
mv ./mongodb-linux-i686-2.4.8/* /usr/local/mongodb
chown mongo:mongo -R /usr/local/mongodb

다운로드 받은 압축파일을 tar 명령어로 풀어낸 후, 저는 /usr/local/mongodb라는 디렉토리를 생성해 이곳에 압축되어 있던 실행파일들을 이동시켰습니다. 그 후에 이 디렉토리와 실행파일들의 소유자를 mongo로 지정함으로써, MongoDB를 쉘로 접속해야 하거나 데몬을 시작해야 할 때 mongo 계정으로도 대응이 가능하도록 하였습니다.

1
2
3
mkdir -p /var/lib/mongodb/data/
mkdir -p /var/lib/mongodb/log/
chown mongo:mongo -R /var/lib/mongodb/

이어서 MongoDB 데이터를 저장할 디렉토리와, 로그를 보관할 디렉토리를 만들 차례입니다. 저는/var/lib/mongodb라는 디렉토리 아래에, data와 log라는 2개의 디렉토리를 만들었습니다. 물론 소유자는 모두 mongo로 지정했음은 물론입니다.

 

Step #4. 환경변수 설정

1
vi /etc/profile

Step #3까지 진행을 했다면, 사실상 MongoDB 자체의 설치는 끝났다고 보아도 무방합니다. 그러나 매번 MongoDB 쉘 접속을 해야하거나 데몬을 재실행해야 할 때 긴 경로를 타이핑하기란 번거롭습니다. 경로를 생략하기 위해서는 vi 에디터로 /etc/profile 파일을 수정해, MongoDB 실행파일들이 들어있는 경로를 환경변수에 넣어주어야 합니다. /etc/profile 파일 가장 아래에 다음과 같은 구문을 타이핑하여 넣습니다.

PATH=$PATH:/usr/local/mongodb/bin

$PATH라는 환경변수는 생략할 수 있는 경로를 보관하고 있는데, 각 경로들은 콜론(:)으로 연결되어 있습니다. 위 코드는 기존에 설정된 $PATH 환경변수를 앞에 붙이고, 그 뒤에 이어서 MongoDB 실행파일들이 모여있는 /usr/local/mongodb/bin 디렉토리를 콜론으로 연결해, 다시 $PATH 변수에 넣어주는 코드입니다.

1
2
source /etc/profile
echo $PATH

코드를 넣고 저장을 한 후에 source 명령어로 profile 파일의 소스코드를 실행해주면, 재부팅 없이도 환경변수를 우리가 지정한대로 추가할 수 있습니다. 그 후에 echo 명령어로 $PATH 변수를 한 번 출력해봅시다. 화면에 콜론으로 연결된 여러 디렉토리들이 보이는데, 그 가운데 /usr/local/mongodb/bin 디렉토리가 있다면 성공입니다!

여기까지 성공했다면, 우리는 /usr/local/mongodb/bin 아래에 있는 MongoDB의 각종 실행파일들을 별도로 경로를 타이핑하지 않고도 바로 실행할 수 있습니다.

 

Step #5. mongod 데몬 실행

MySQL에 데몬 mysqld가 있듯이, MongoDB에는 데몬 mongod가 있습니다. 이 데몬이 작동하고 있어야만 비로소 MongoDB를 사용할 수 있습니다. 데몬을 실행하는 명령어는 아래와 같습니다.

1
mongod --fork --dbpath /var/lib/mongodb/data/ --logpath /var/lib/mongodb/log/log.txt

먼저 mongod는 /usr/local/mongodb/bin 디렉토리 아래에 있는 데몬 실행파일입니다. Step #4에서 환경변수를 설정한 덕분에 긴긴 경로를 생략하고 바로 실행파일 이름만으로 실행을 할 수 있었을 뿐입니다. 각 옵션에 대해서 설명하면 아래와 같습니다.

–fork는 mongod 프로세스를 생성하고 바로 커맨드모드로 돌아올 수 있는 옵션입니다.

–dbpath는 다름 아닌 DB를 저장한 디렉토리 경로를 지정하는 옵션입니다. 우리는 위에서 이미 데이터를 저장하기 위해 /var/lib/mongodb/data/라는 디렉토리를 만든 바 있지요.

–logpath 역시 이름 그대로 로그파일의 경로를 지정하는 옵션입니다. 여기서 중요한 것은 –dbpath는 디렉토리 경로인 반면에, –logpath는 반드시 파일이 되어야 한다는 것입니다. log.txt 정도로 지정하면 무난할 듯 하군요.

1
netstat -ln

데몬을 실행했다면 netstat 명령어로 상태를 확인해볼 수 있습니다. 특별한 설정이 없다면 mongod는 27017번과 28017번의 2개 포트를 사용합니다. 27017번이 MongoDB에 연결할 수 있는 포트이고, 28017번 포트를 웹 브라우저 접속하면 간단한 모니터링 도구를 사용할 수 있습니다. 이 2개의 포트가 tcp로 열려있다면, 실행은 성공입니다.

 

Step #6. PHP 드라이버 설치

1
2
3
unzip master.zip
cd mongo-php-driver-master

Linux에서 사용하는 PHP 드라이버는 GitHub에서 다운로드 받을 수 있습니다. URL을 잘 확인하시고, FTP나 curl, wget 등으로 파일을 다운로드 받습니다. 저는 위와 같이 wget 명령어로 간편하게 다운로드 받고, unzip으로 압축을 풀었습니다. 압축을 풀면 mongo-php-driver-master라는 디렉토리가 있는데, 그 안에는 PHP 드라이버의 소스파일들이 들어있습니다.

1
2
3
4
phpize
./configure
make
make install
  • Download the latest release http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
  • Extract the files
  • do a normal ./configure; make; sudo make install;
  • 위에 주소에있는 autocfonf를 설치해야 mongo-php-driver-master를 사용할 수 있습니다.이제 위와 같이 소스파일을 컴파일하여 설치를 진행합니다. 최종적으로 make install을 실행하면, MongoDB의 드라이버가 위치하게 된 php 모듈 디렉토리의 경로가 화면에 표시됩니다. ls 명령어로 그 디렉토리를 열어보아 mongo.so 파일이 있다면 성공입니다. 제 경우에는 /usr/lib/php/modules 아래에 위치하게 되더군요.

    1
    2
    ls /usr/lib/php/modules/mongo.so
    vi /etc/php.ini

    php.ini 파일에서 mongo.so를 extension으로 추가해줍니다.

    extension=/usr/lib/php/modules/mongo.so

    마지막으로 웹서버를 재시작하면 됩니다.

    1
    /etc/init.d/httpd restart

    MongoDB 드라이버가 제대로 설치되었나를 확인하는 데에는 phpinfo() 함수가 유용합니다. PHP 파일을 하나 작성하여, phpinfo() 함수를 호출한 후 웹브라우저에서 실행해봅니다. mongo라는 항목이 있으면 성공입니다!

    phpinfo() 함수에서 확인한 mongo 항목

     

    Step #6-2. php.ini을 수정해도 소용이 없을 떄

    PHP5의 최근 버전에서는 php.ini 파일을 직접 앞서 과정처럼 수정해도, phpinfo() 함수를 호출해보면 mongo 항목을 찾을 수 없는 경우가 있습니다. 이 때에는 /etc/php.d라는 디렉토리에 각 모듈에 대한 세팅을 가진 ini 파일이 모여있는지 확인해봅시다. 만약 ini 파일들이 모여있다면, 여기에 MongoDB 드라이버를 위한 ini 파일을 추가하면 됩니다.

    1
    2
    touch /etc/php.d/mongo.ini
    vi /etc/php.d/mongo.ini

    위처럼 mongo.ini 파일을 만들고, vi 에디터에서 아래의 내용을 타이핑합니다. 단, extension_dir에는 make install 명령어 실행 직후에 확인한 경로를 넣어야 합니다.

    extension_dir=/usr/lib/php/modules
    extension=mongo.so

    1
    /etc/init.d/httpd restart

    이제 웹 서버를 다시 한 번 재시작한 후에 phpinfo() 함수를 호출하고 mongo 항목을 찾아봅시다. 항목이 있다면 성공입니다.


    'DB,SQL' 카테고리의 다른 글

    ZooKeeper를 활용한 Redis Cluster 관리  (0) 2014.03.21
    php 에서 mongoDB 사용하기  (0) 2014.03.07
    mongoDB php연동  (0) 2014.03.05
    mongoDB dbshell 레퍼런스  (0) 2014.03.05
    SQL과 mongoDB의 명령어 차이  (0) 2014.03.04