우분투 MongoDB + Node.js 설치 : Ubuntu Linux MongoDB Node.js
"우분투에 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
[참고자료]
요약하면 우리가 흔희 보는 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 모듈만 사용하였다.
'플렛폼 > 우분투' 카테고리의 다른 글
우분투 자바7 아파치톰캣7 설치하기 : Ubuntu JAVA 7 Apache Tomcat 7 Installing (1) | 2014.07.21 |
---|---|
우분투 Nginx PHP5 설치하기 : Ubuntu Nginx PHP5 (3) | 2014.06.10 |
리눅스 우분투 9 자바 , 아파치 톰캣 설치 및 설정 : Linux Ubuntu JAVA TOMCAT (4) | 2009.10.14 |
리눅스 우분투 9 데스크톱 설치 : Linux Ubuntu (0) | 2009.07.19 |