> Hello World !!!

     

@syaku

우분투 MongoDB + Node.js 설치 : Ubuntu Linux MongoDB Node.js


written by Seok Kyun. Choi. 최석균

"우분투에 MongoDB 와 Node.js 설치하기"


MongoDB 와 Node.js 를 우분투에 설치하고 구동하는 방법을 설명하려고 한다.

(윈도우 플랫폼은 설치 설명조차... 사치일 정도로 쉽다.)


설치환경은 리눅스 우분투 11.x 이며 MongoDB 2.4.8 그리고 Node.js 0.10.22 이다.


[모바일앱 서버사이드 프로그램]

모바일 앱을 개발하면서... SNS 의 빅데이터를 어떻게 효율적으로 관리되는 건가... 고민을 많이했다.

연결 관계나 자료 관리 즉, 필터되고 공유되고 조회되는 것들 그리고 삭제... 등등 다른 DBMS도 구현이 가능하지만, 처리 속도의 안정성을 보장 받을 수 있을지 의문이 였다.


그리고 웹프로그램은 클라리언트가 서버에 접근하여 서버에서 처리된 화면자료를 클라이언트에서 볼 수 있는 환경이지만,

모바일앱은 클라이언트가 서버에 접근하여 전달 받은 데이터를 이용하여 클라이언트 프로그램으로 볼 수 있게 구현하는 환경이다.


쉽게 말해 웹프로그램보다 모바일앱이 서버 접근 요청이 더 많다는 이야기다.

그래서 서버가 클라이언트에게 응답을 얼마나 빠르게 해주느냐? 에 따라 속도를 좌우하게 되지 않을까?

이런 부분을 해소하기 위해 Node.js 나 MongoDB 같은 서버사이드 프로그램이 있는 게 아닐까?


[2013.11.28 내용추가] MongoDB 흔한 오류 해결법?


처음 설치후 실행은 잘되나, 재부팅 후 mongo 를 실행하면 다음과 같은 오류가 발생한다.

Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145


설치할때는 /var/lib/mongodb/ 의 디비경로를 사용하지만, 재부팅 후 실행하면 기본값인 /data/db 경로를 찾아서 오류가 발생하는 것이다.

아래의 명령어로 실행하면 중간 부분에 "경로를 찾을 수 없다" 라는 메세지가 보일것이다.

> mongod

.. 생략

ERROR: dbpath (/data/db/) does not exist.

.. 생략


그래서 아래와 같이 하면 오류를 해결할 수 있다.

> sudo mongod --config /var/lib/mongodb/mongodb.conf

이렇게 되면 서비스가 구동되고 새로운 터미널창에서 mongo 를 실행하면 정상적으로 작동할것이다.


하지만 원척적인 해결방법은 아니다... 재부팅할때마다 위 방법으로 실행해줘야하는 문제가 있기 때문이다.

그래서 최신버전을 재설치 후  재시작하고 실행해봤더니... 아무 문제가 없다... 잘 구동된다.

mongod 를 설치할때 제대로 명령어를 사용하지 않은 경우 발생하는 문제인 것 같다.



* 아래의 설치법을 최근 정보로 수정하였습니다.



MongoDB가 무엇인가? 

- 공식사이트 : http://mongodb.org


[참고자료]

http://lovedb.tistory.com/153

http://jabsiri.tistory.com/76


요약하면 우리가 흔희 보는 DBMS 구조와는 다르게 JSON 저장구조를 갖고 있으며 빅데이터 처리 성능이 아주 훌륭하다고 한다.

NoSQL 이므로 JSON 자료 구조를 이용하여 CRUD 할 수 있으며 자바스크립트 크롬 브라우저 V8 을 사용하고 있어... 

CRUD 를 할때 자바스크립트를 사용할 수 있다.


아래 그림은 MongoDB 와 RDBMS SQL 구문을 비교한 것 이다.


# MongoDB SELECT


# SQL SELECT



MongoDB 설치하기


모든 운영체제를 지원하지만, 작성자는 리눅스 우분투를 선택하여 설치했다.

MongoDB 사이트에 접속하면 도큐먼트 메뉴에 설치 방법이 아주 잘 정리되어있다.

(http://docs.mongodb.org/manual Installation 메뉴를 선택하고 원하는 플랫폼 설치 메뉴얼을 볼 수 있다.)


우선 apt-get 에 패키지를 등록해야 한다. 이 작업을 하지않고 인스톨 할 경우 당연히 찾을 수 없다는 메세지를 접하게 될 것이다.

> sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

> echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list


apt-get 패치지 경로 추가

> sudo vi /etc/apt/sources.list

deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

맨 하단에 추가함.


apt-get 패키치 목록을 업데이트한다.

> sudo apt-get update


이제 apt-get 을 이용하여 MongoDB 를 설치하자. 아래 두줄의 명령어는 같지만 아래의 명령어를 사용하면 원하는 버전을 설치할 수 있다.

(아래의 명령어 중 한개만 입력하면 된다.)

> sudo apt-get install mongodb-10gen

> apt-get install mongodb-10gen=2.4.8


dpkg 패키지에 등록

> echo "mongodb-10gen hold" | sudo dpkg --set-selections



MongoDB 관리 및 명령어


구동 시작과 종료 그리고 재시작 명령어이다.

> sudo service mongodb start

> sudo service mongodb stop

> sudo service mongodb restart


접속 ( --help 도움말)

> mongo


계정 접속, 특정 데이터베이스 접속

> mongo -u계정 -p암호 db


* db 에는 아래와 같이 작성할 수 있다.

- 데이터베이스 명

- 주소/데이터베이스 명

- 주소:포트/데이터베이스 명

ex) 192.168.11.1:9930/test


> help           # 도움말

> db              # 현재 연결 db

> show db     # 모든 db 보기

> use test      # test 디비 연결




MongoDB 관리 툴

윈도우용 관리툴 http://www.mongovue.com

이클립스용 http://www.jumperz.net/index.php?i=2&a=0&b=9

MonjaDB 는 이클립스용 플러그인이다. 이클립스를 실행하고 help 마켓플레이스에서 내려받을 수 있다.


Windows Server 서비스 등록법

mongod --bind_ip 127.0.0.1 --logpath 로그저장경로와파일명 --logappend --dbpath 데이터베이스저장폴더 --directoryperdb --install


--bind_ip 127.0.0.1 옵션을 넣게되면 외부에서 접속할 수 없게된다.


서비스 삭제

mongod --remove --serviceName MongoDB



Node.js 란 무엇인가?

- 공식사이트 : http://nodejs.org


자바스크립트의 활용면이나 속도면에서 훌륭한 스크립트언어로 인정받으며. 웹뿐아니라 다양한 플랫폼에서도 사용할 수 있게 표준 CommonsJS

가 발표되었다.(자바스크립트는 클라이언트에서 구동되는 스크립트언어이다.)

자바스크립트를 서버 사이드 프로그램으로 구동될 수 있게 만들고자 했던 결과물이 Node.js 이다. 

Node.js 는 크롬 브라우저의 자바스크립트 V8 엔진을 사용하여 처리속도가 월등하다.

자바스크립트 언어를 사용하여 웹 개발자라면 누구나 쉽게 개발할 수 있어 접근성이 용의하다.

그 외 자바스크립트 언어의 장점을 그대로 승계받았다고 보면 된다.


요즘 다중 스레드보다 싱글 스레드 기반의 플랫폼들이 많이 나오는 것 같다. Node.js 도 싱글 스레드이다.

접속하는 수만큼 스레드수가 늘어나는 것이 다중 스레드이며, 1개의 스레드로 접속 순서에 때라 대기 후 처리 하는 것이 싱글 스레드이다.

다중 스레드는 접속수가 많은 만큼 메모리 할당량이 늘어나는 단점이 있지만 Node.js 그렇지 않은 장점이 있다.


모바일앱은 클라이언트에서 비지니스로직을 처리하고 서버에서는 자료만 주고 받는 역활을 하기에 Node.js 와 같은 프로그램이 적합할 것 같다.


또한 Node.js 는 다른 프로그램 언어와 다르게 설치만 하면 부가적으로 설정해야 할 작업이 없어 간편하다.

필요한 모듈도 npm 명령어를 이용하여 쉽게 설치가 가능하며, 필요하다면 직접 개발도 가능하여 확장성이 뛰어나다.


개발된지 아직 3년밖에 되지않아... 부족한점도 있겠지만... 미래를 봤을 때 발전 가능성이 엄청날 것 같다.

이미 페이스북, 월마트 아마존 등등 Node.js 사용한다고 한다... 네이버도... 



Node.js 설치하기


공식 사이트에서 버전을 확인하고 wget 으로 소스코드 Node.js 내려받는다.

> sudo wget http://nodejs.org/dist/v0.10.22/node-v0.10.22.tar.gz


압축 풀기

> sudo tar -xvf node-v0.10.22.tar.gz


설치하기

> cd cd node-v0.10.22

> ./configure

> sudo make

> sudo make install


Node.js 실행

> node


apt-get 을 이용해서 설치할 수 있다.

> sudo apt-get install node.js 


Node.js 서비스 시작


var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, { 'Content-Type' : 'text/html' });
  response.end('Hello World .. !');
}).listen(8888, function() {
  console.log('Server running at http://127.0.0.1:8888');
});


위 index.js 파일을 만들어 아래와 같이 서비스를 시작하면 된다.

> node index


우리가 흔히 보던 아파치와 톰캣 그리고 IIS 와 같은 개념으로 접근하면 안된다.

어떤 경로이든 js 파일을 생성하고 node 파일명 으로 실행하면 그 자체 경로에서 서버스 활성화 된다.


Node.js(Express 프레임워크) 앞단에 웹서버를 두고 사용하는 것이 좋다고 한다...

참고 : http://inspiredjw.tistory.com/21

필요하다면 NGiNX 를 설치하는 것도 좋을 것 같다.

프록시 서버로 엄청난 능력을 가졌다고 한다.... .... 여튼 NGiNX 에 대해서도 공부해보는 것이 좋을 것 같다.

(배워야할게 엄청나네요~ 전 그저 모바일앱용 서버프로그램을 만들려고 한 것 뿐인데... ^^)


부가적으로 설치해야할 필수 모듈

-g 옵션은 전역설치를 의미한다. (모든 서비스에 적용되는 모듈)


# 내장 모듈인 http 를 확장하여 개발된 프레임워크이다. http 에 없는 다양한 기능을 제공한다.

> sudo npm install -g express


# MongoDB 모듈

> sudo npm install -g mongodb


# 소스파일이 변경됐을 경우 서비스에 반영해주는 모듈

개발할때 사용하는 모듈이다.

> sudo npm install -g supervisor


> export NODE_ENV=development

> sudo supervisor JS파일명


# 소스파일이 변경됐을 경우 서비스를 자동으로 반영해주는 모듈

개발할때 사용하는 모듈이다.

> sudo npm install -g nodemon


*위 2개 모듈을 모두 실행하는 것이 아니라 필요한 1개만 사용할 수 있다.


# 전역 모듈 설치 후 모듈을 찾을 수 없을 경우

참고 http://seorenn.blogspot.kr/2011/08/nodejs-npm.html

오류메세지 Cannot find module


※ 방법1 : NODE_PATH 설정

[우분투 설정]

export NODE_PATH=$NODE_PATH:/usr/local/lib/node_modules:/usr/lib/node_modules

[윈도우 설정]

NODE_PATH = %NODE_PATA%;Node.js 설치경로\node_modules;사용자계정폴더\AppData\Roaming\npm\node_modules


※ 방법2 : 우분투 링크 설정

> sudo ln -s /usr/local/lib/node_modules node


※ 방법3 : npm 으로 링크 설정

> sudo npm link 모듈명


# 서비스가 죽었을 경우 서비스를 시작(관리)하는 모듈

서비스를 운영할때 사용하는 모듈이다.


> sudo npm install -g forever


서비스 시작

> sudo forever start JS파일명


서비스 상태보기 (윈도우에서 안됨)

> forever list


로그 생성하여 실행하기

> sudo forever -o 로그.out.log -e 로그.error.log start JS파일


위 모듈들을 보면 다 한번에 사용할 수 있는 것인지 아니면 개별적으로 사용해야하는 지... 잘 모르겠다;;

같이 실행하면 이미 실행되어 있어 오류가 발생한다.

일단 개발시에 소스가 재로드 될 수 있는 모듈을 사용하였고, 서비스 서버에서는 forever 모듈만 사용하였다.



posted syaku blog

Syaku Blog by Seok Kyun. Choi. 최석균.

http://syaku.tistory.com