Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

node.js에서 사용가능한 MongoDB 드라이버 : node-mongodb-native

node-Mongodb-nativeChristian Amor Kvalheim이 만든 MongDB용 Native Driver입니다. 이 드라이버는 Ruby용 드라이버인 mongo-ruby-driver를 node.js로 포팅한 것으로 현재 최신버전은 0.8.1입니다. npm install mongodb 명령어를 이용해서 node-mongodb-native를 설치할 수 있습니다.


var mongodb = require('mongodb'),
Db = mongodb.Db;

var db = new Db('test_db', new Server(process.env["MONGODB_HOST"], process.env["MONGODB_PORT"], {}));

db.open(function(err, db) {            
   db.collection("test_collection", function(err, collection) {
      collection.find({"cmd":cmd}, {"sort":"order"}, function(err, cursor) {
         cursor.each(function(err, item) {
            if (item != null) {
               // Do something
            }
               
            if (item != null) {} // 반복문 끝
         });
         db.close();
      });   
   }); 
});

위와 같이 사용합니다.  MongoDB 서버에 대한 새로운 DB객체를 생성한 뒤에 디비를 열고 컬렉션에 접근한뒤에 디비를 사용하게 되는데 콜백형태로 연결해서 사용하는 구조로 되어 있습니다.


db.open(function(err, db) {});

// db.open()뒤에 db파라미터를 사용하는 메서드들
db.dropDatabase(function(err, result) {});
db.createCollection('컬렉션명', function(err, collection) {});
db.collection('컬렉션명', function(err, collection) {});

// 컬렉션연결뒤에 collection파라미터를 이용하는 메서드들
collection.remove(function(err, collection) {});
collection.drop(function(err, collection) {});
collection.insert({});
collection.count(function(err, count) {});
collection.find(function(err, cursor) {});


위 코드들은 실제 사용예시는 아니고 많이 사용할 만한 메서드들을 리스팅한 것입니다. 당연히 위의 메서드들은 앞에서 본 예제처럼 모두 콜백내에서 사용하는 형태가 됩니다.


db.open(function(err, db) {
   // 인증
   db.authenticate(USERID, PASSWORD, function() {
      if (err) { sys.debug("DB Authentication error!"); }
                
      db.collection("test_collection", function(err, collection) {   
      }); 
   });       
});


MongoDB를 인증모드로 사용할 때는 위와 같이 authenticate메서드를 사용해서 USERID와 PASSWORD를 입력해서 인증을 받은뒤에 사용해야 합니다.

처음 사용해 보면서 node-mongodb-native를 선택하기는 했지만 써보면 사용하기에 무리는 없지만 아주 편한 느낌은 아니었습니다. 일단 콜백형태로 모두 이어지는 구조이기 때문에 복잡한 디비작업을 하면 콜백의 콜백으로 너무 이어져서 가독성도 그다지 좋지 않습니다. 좀 비교는 해봐야겠지만 메일링을 보면 ORM 비슷하게 사용할 수 있는 mongoose가 최근 메이저버전인 v1.0도 릴리즈 되었고 더 많이 쓰이는것 같습니다. 예제만 보기에는 코드도 좀더 깔끔해 보여서 다음 기회에는 mongoose를 사용해 봐야할 것 같습니다.

저는 아주 간단한 사용만 해보았는데 0.8.0버전 이상부터는 BSON파서가 추가되는 등 MongoDB에 대한 지원폭이 커지고 있습니다. 소스코드내에 포함된 examples를 참고하면 더 다양한 사용법에 대해서알수 있을 것입니다. 
2011/02/24 01:35 2011/02/24 01:35