티스토리 뷰
안녕하세요 박스여우입니다. 요즘 새로운 서비스를 준비중이라 NodeJS를 다루고 있는데요, 그래서 이번에는 NodeJS와 MongoDB연동하고 사용하는 방법에 대해서 알아보도록 하겠습니다.
■MongoDB 설치
지난 포스팅에 이어서 진행되는 프로젝트이므로 이전 포스팅을 보지 않으셨다면 읽고 오시는것을 추천합니다. 그럼 MongoDB연동을 시작해 보도록 하겠습니다. MongoDB를 사용하기 위해서는 MongoDB를 사용해야겠지요?
MongoDB를 설치하는 방법은 매우 다양합니다. 저의 경우 여러가지 방법을 시도해 보았지만 대부분 되지않는 방법이 많아서 제가 성공한 MongoDB 설치 방법을 적어보도록 하겠습니다.
1 2 3 4 | [root@localhost ~]# cd /usr/local/ [root@localhost local]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.6.tgz -O mongo.tgz [root@localhost local]# tar -zxvf mongo.tgz [root@localhost local]# mv mongodb-linux-x86_64-2.6.6 mongodb | cs |
우선 mongodb가 설치될 디렉토리 /user/local/에 접근하여 wget을 통해 mongodb tgz를 다운로드 받아줍시다. 그리고 다운로드가 완료되면 파일의 압축을 해제해 주어야 합니다. 3, 4번 라인의 명령어를 입력하면 다운로드받은 mongo.tgz 파일이 압축해제가 됩니다. 그리고 Mongodb를 사용하기 위한 몇가지 설정을 위해 아래 명령어를 입력해주세요
MongoDB 셋팅 명령어
1 2 3 4 5 | [root@localhost local]# cd /usr/local/mongodb/ [root@localhost mongodb]# mkdir data [root@localhost mongodb]# mkdir config [root@localhost mongodb]# mkdir log [root@localhost mongodb]# vi config/mongodb.conf | cs |
5번줄의 명령어를 입력하면 config 내용을 설정해 주셔야 합니다. 그러면 아래와 같이 설정해 주시면 됩니다. 포트의 경우 원하시는 포트로 설정하셔도 괜찮습니다.
Config 설정 내용
1 2 3 4 5 6 7 8 | dbpath=/usr/local/mongodb logpath=/usr/local/mongodb/log/mongodb.log logappend=true port=5050 verbose=true fork=true rest=true | cs |
■MongoDB 사용
MongoDB 설치과정을 모두 완료하셨으면 이제 MongoDB를 사용할 수 있습니다. 그전에 우선 MongoDB를 실행시켜야 하는데요, 아래 명령어를 통해서 MongoDB를 실행시킬 수 있습니다.
MongoDB 실행 명령어
1 | [root@localhost config]# /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/config/mongodb.conf | cs |
MongoDB 접속 코드
1 2 3 4 5 6 | var MongoClient = require('mongodb').MongoClient; MongoClient.connect("mongodb://localhost:5050/test", function (err, db) { console.log('err:' + err + '\ndb:' + db); db.close(); }); | cs |
NodeJS에서 MongoDB를 접속하는 방법은 위와 같습니다. localhost:5050/test에서 5050은 위에 config에 설정한 포트번호이며, test는 접속할 database의 이름입니다. 1번 라인의 require를 보시면 알 수 있듯이 NodeJS에서 Mongodb를 사용하기 위해서는 mongodb 모듈이 필요합니다. 따라서 npm install mongodb 명령어를 통해 mongodb 모듈을 다운로드 받아 주세요
Insert Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var MongoClient = require('mongodb').MongoClient; MongoClient.connect("mongodb://localhost/test", function (err, db) { if(!err){ db.collection("test").insert({ "name": "boxfox", age : 1234 }, function (e) { console.log(e); db.close(); }); } }); | cs |
MongoDB는 NOSQL(Not Only SQL)로 Mysql과 같은 RDMS처럼 고정된 스키마나 JOIN이 존재하지 않습니다. 즉, 테이블을 생성하지 않고 데이터를 Insert할 수 있다는 것입니다.
6~8번라인을 보시면 insert할 데이터를 JSON과 같이 작성합니다. MongoDB에서는 이를 Document라고 부르며, collection은 Document의 그룹 입니다. RDMS의 table과 비슷한 개념이지만, 테이블과 같은 스키마가 없습니다.
Select Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var MongoClient = require('mongodb').MongoClient; MongoClient.connect("mongodb://localhost/test", function (err, db) { if(!err){ db.collection("test").findOne({ "name": "boxfox" }, function (err, user) { console.log('user', user); db.close(); }); } }); | cs |
다음은 MongoDB에 입력된 데이터를 조회하는 코드 입니다. 7번 라인과 같이 조건을 두어 name이 boxfox인 유저만 찾을 수 있습니다. findOne은 한개의 결과물만 가져오는 명령어이며 find를 통해 여려개의 데이터를 가져올 수 있습니다.
Update Example
1 2 3 4 5 6 7 8 9 | db.collection("test").update({ "name": "boxfox" }, { age: 60 }, function (e, num) { console.log(num); db.close(); } }); | cs |
겉의 코드는 생략하고 핵심코드만 다루도록 하겠습니다. 이번에는 이름이 boxfox인 유저의 age를 60으로 변경하는 데이터를 Update하는 예제 입니다.
Delete Example
1 2 3 4 5 6 | collection.remove({name:"boxfox"}, function(err, numberOfRemovedDocs) { assert.equal(null, err); assert.equal(1, numberOfRemovedDocs); db.close(); }); | cs |
마지막으로 데이터를 삭제하는 예제 입니다. 1번 라인과 같이 name이 boxfox인 유저를 삭제합니다.
'프로그래밍 > 웹' 카테고리의 다른 글
React를 1년동안 사용하면서 느낀점 (0) | 2018.03.08 |
---|---|
Nodejs - Request의 paramaters 사용 (375) | 2017.02.12 |
Spring - Mysql 연동 (418) | 2017.02.08 |
Javascript - JQuery없이 POST 전송하기(Google URL Shortener) (411) | 2016.11.14 |
AngularJS (424) | 2016.08.18 |