12-12 04:59
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Application / MongoDB - Node.js 연동하기 본문

Data Science/MongoDB

[MongoDB] Application / MongoDB - Node.js 연동하기

cinema4dr12 2014. 1. 21. 18:30

Written by Geol Choi | 


Server-side 네트워크 프로그램 제작용 프레임웍인 Node.js와 Mongo DB를 연동하는 법에 대해 알아보도록 하겠습니다.


설명방식은 Node.js의 설치하는 것으로부터 시작되는 철저히 따라하기 예제 방식이며, 가장 기초적인 부분을 다루도록 하겠습니다. 따라서, 이미 어느 정도 Node.js에 대해 익숙한 분들은 초반부분을 스킵하고 연동하는 부분만 집중하시기 바합니다.


Node.js를 통해 Mongo DB의 서버와 연결(connect)하고 Mongo DB의 스키마(schema)와 모델(또는 컬렉션)을 생성하는 방법을 알아보겠습니다. 또한 DB에 컬렉션을 추가하고 저장하는 방법에 대해 알아보도록 하겠습니다.


설명은 Mac OS X를 기준으로 하며, Windows의 경우 별도 설명을 덧붙였습니다.

1. Node.js 및 MongoDB 설치

Node.js의 웹사이트를 방문하여 다운로드 할 수 있으며, 사용자의 OS 환경을 자동으로 파악하여 다운로드 됩니다. MongoDB 또한 MongoDB의 다운로드 사이트를 통해 다운로드가 가능합니다. 이미 설치되어 있는 경우 이 과정을 생략합니다.

2. MongoDB 환경변수 설정

Mac OS

우선 Mac의 숨김 파일을 볼 수 있도록 "숨김파일 해제"를 실행합니다. 숨김파일이 해제되면 희미하게 시스템 파일이 표시될 것입니다. 텍스트 에디터에서 "Users/{user name}/.bash_profile" 파일을 열고, 다음을 추가합니다 (만약 .bash_profile이 안 보인다면 Mac Ports를 설치하면 보이게 됩니다).

$ export PATH=/Users/{user name}/{Mongo DB PATH}/bin:$PATH


Shell이 실행 중이라면 닫고 재시작한 후, 아무 path에서나 "mongo" 명령이 실행되는지 확인합니다. 만약 실행이 잘 된다면 환경변수가 잘 설정된 것입니다.

Windows

시작 > 컴퓨터 > 속성 > 고급 시스템 설정 > 시스템 속성 > 고급 > 환경 변수 > 시스템 변수 > "%MONGODB_HOME%/bin" 추가

3. Node.js 환경변수 설정

Mac OS

다운로드 한 Node.js의 .pkg 파일을 실행하여 설치 시 "설치유형" 단계에서 "설치 위치 변경"을 하지 않고 default로 설치하였다면 환경변수 설정없이 Node.js의 명령어가 인식됩니다.


설치 위치를 변경하였다면, MongoDB의 환경설정과 마찬가지로 설정합니다. 단, "MongoDB PATH"를 "NodeJS PATH"로 변경합니다.

Windows

시작 > 컴퓨터 > 속성 > 고급 시스템 설정 > 시스템 속성 > 시작 및 복구 > 환경 변수 > 시스템 변수 > "[Node.js 설치 path]/nodejs" 추가


이미 자동으로 추가된 경우, 이 단계를 생략합니다.

4. 프로젝트 폴더 생성

적당한 곳에 프로젝트 폴더를 생성합니다. 폴더명은 "Mongoose-test"라고 명명하도록 하겠습니다. 방금 생성한 폴더 내에 "node_modules"라는 이름으로 폴더를 생성합니다.

Mac OS

Shell 또는 Terminal(Windows의 경우 console)을 실행하고,

"cd [PATH Mongoose-test]" 명령을 입력하여 "Mongoose-test" 폴더로 이동합니다.


"ls" 명령어(Windows의 경우 "dir")를 입력하여 "node_modules" 폴더가 있는지 확인합니다.

Windows

Windows console을 실행하여 "Mongoose-test" 폴더로 이동합니다.

5. Mongoose 설치

Mongoose는 Node.js를 통해 Mongo DB를 사용할 수 있도록 하는 Node.js용 패키지입니다.


Shell에서 npm install 명령어를 통해 설치한다. (현재 경로는 "Mongoose-test" 폴더이므로, 반드시 이 경로로 이동하여 명령어를 실행해야 합니다.)


$ npm install mongoose


설치가 성공적으로 완료되면 "Mongoose-test/node_modules" 폴더 내에 "mongoose"가 생성될 것이다.

6. MongoDB 서버 실행

Mongo DB 로컬 서버를 실행하려면 Shell에서 "mongod"를 입력한다. 만약 특정 위치에 DB를 지정하여 사용하고 싶다면, "mongod -dbpath {MongoDB PATH}"로 입력합니다.

Mac OS


Windows



MongoDB 서버 실행에 대한 자세한 내용은 이곳을 참고하시기 바합니다. 만약 로컬 서버가 아닌 Mongo Lab 클라우드 플랫폼을 이용 중이라면 이곳을 참고하시기 바랍니다.

7. Node.js 코드 작성

우선 텍스트 에디터를 열어 다음과 같은 JavaScript 코드를 작성합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// get mongoose package
var mongoose = require('mongoose');
 
// connect to MongoDB / the name of DB is set to 'myDB'
mongoose.connect('mongodb://localhost/myDB');
 
// we get the pending connection to myDB running on localhost
var db = mongoose.connection;
// we get notified if error occurs
db.on('error'console.error.bind(console'connection error:'));
// executed when the connection opens
db.once('open'function callback () {
    // add your code here when opening
      console.log("open");
});
 
// creates DB schema
var userSchema = mongoose.Schema({
    username: 'string',
    age: 'number'
});
 
// compiels our schema into a model
var User = mongoose.model('User', userSchema);
 
// add user1 and user2 to "User" model
var user1 = new User({ username: 'gchoi', age: 30 });
var user2 = new User({ username: 'jmpark', age: 29 });
 
// save user1
user1.save(function (err, user1) {
  if (err) // TODO handle the error
      console.log("error");
});
 
// save user2
user2.save(function (err, user2) {
  if (err) // TODO handle the error
      console.log("error");
});
cs


작성된 JavaScript 코드를 프로젝트 폴더에 "mongoose-test.js"라는 이름으로 저장합니다. 코드의 전체적인 줄거리는 다음과 같습니다:


  • Line 2: Node.js의 Mongoose 모듈을 얻어와 변수 'mongoose'에 저장합니다.

  • Line 5: local host에서 'MyDB'라는 이름으로 MongoDB를 설정하고 연결합니다.

  • Line 8 : 연결된 내용을 'db'라는 변수로 저장합니다.

  • Line 10 : DB와 연결되는 순간 실행된다. 만약 연결에 실패하면 'connection error'라는 메시지를 출력합니다.

  • Line 12 - 15 : DB가 open 되었을 때 실행됩니다.

  • Line 17 - 21 : 'userSchema'라는 변수에 DB schema를 생성합니다. 아마도 MongoDB의 쿼리문을 통해 DB 작업에 익숙한 분들은 이 부분이 익숙하지 않을 수 있겠습니다. Schema는 필요에 따라 언제든 구조 변경이 가능합니다. 간단히 사용자의 이름(username)과 나이(age)의 두 개의 키 값으로 설정하였으며 이름은 'string' 타입으로 age는 'number' 타입으로 하였습니다.

  • Line 24 : 'userSchema'인 DB Schema를 'User' 모델로 컴파일합니다.

  • Line 26 - 27 : 'user1'과 'user2' 두 명의 user를 'User'에 등록합니다.

  • Line 31 - 40 : 'user1'과 'user2'를 저장합니다. DB에 기록하려면 반드시 저장해야 합니다. 혹시라도 궁금하신 분들은 이 부분을 생략해 보길 권장드립니다. MongoDB 콘솔에서 DB에 내용이 들어가지 않음을 발견하실 것입니다. 만약 DB로의 저장에 실패할 경우, 'error'라는 에러 메시지를 출력합니다.

8. Node.js 코드 실행

MongoDB 서버가 실행되고 있는 Shell(또는 console) 외에 Shell 하나를 더 실행하여 프로젝트 폴더로 이동한 후, 다음과 같이 명령을 입력합니다:

$ node mongoose-test.js


만약 이상없이 실행된다면 "open"이라는 메시지가 출력될 것입니다.

[Windows에서 실행한 화면]


[Mac OS에서 실행한 화면]




실행 시 MongoDB 서버가 실행되고 있는 Shell(console)에 Node.js를 통해 실행되는 DB 내용과 용량 및 걸린 시간 등이 표시될 것입니다.

9. Shell(Console)에서 DB 내용 확인

이제 Node.js를 통해 실행된 DB 내용을 확인해 보겠습니다. 마지막으로 Shell을 하나 더 실행하고 프로젝트 폴더로 이동하여 다음 명령어를 입력합니다.

$ mongo
$ use myDB
$ db.users.find()

[Windows 결과 화면]


[Mac OS 결과 화면]

"db.User.find()"가 아닌 "db.users.find()"인 것이 약간 의아스럽습니다. 왜냐하면 모델(또는 컬렉션)명을 'users'가 아닌 'User'로 하였기 때문입니다. 심지어 's'가 붙어야 하는 것 외에 대문자도 소문자로 입력하여야 함에 유의해야 합니다. 이렇듯 collection 이름 입력에 유의해야 하며 현재 사용 중인 DB의 collection명을 확인하려면 다음을 입력합니다:


$ db.getCollectionNames()


아래 그림과 같이 현재 DB의 collection 이름이 "User"가 아닌 "users"로 되어 있음을 확인할 수 있다.


[Windows 결과 화면]


[Mac OS 결과 화면]

이상으로 Node.js와 MongDB를 연동하는 기초 부분에 대하여 설명을 마치도록 하겠습니다. DB의 내용 수정/추가 등 좀 더 고급 과정은 차후에 다루도록 하겠습니다.

Comments