node js에서 가장 손쉽게 mongodb에 연결하는 방법으로 MongoClient.connect를 사용할 것이다.

var db;
function connectDB() {
    var databaseUrl = 'mongodb://id:password@192.168.0.1:27017/local';
    MongoClient.connect(databaseUrl, function(err, db) {
        if (err) throw err;
        console.log('데이터베이스에 연결되었습니다. : ' + databaseUrl);
        database = db;
    });
}

 

그 때 일반적으로 사용하는(책에 나와있는) 문법은 위와 같았다.

근데 잘 안되더라...

찾아보니 mongodb 3.0부터인가는 url에는 포트까지만 적고 database로 리턴할때 database명이 포함되어야 하더라...

다음처럼...

var db;
function connectDB() {
    var databaseUrl = 'mongodb://id:password@192.168.0.1:27017';
    MongoClient.connect(databaseUrl, function(err, db) {
        if (err) throw err;
        console.log('데이터베이스에 연결되었습니다. : ' + databaseUrl);
        database = db.db('local');
    });
}

 

다행히도 이건 어렵지 않게 구글링해서 해결했다.

문제는 mongoose 모듈 연동....

왜 책에서는 authentication이 disable 상태로 예제를 만들었는지 모르겠지만
(세상에 DB에 authentication을 안거는 인간이 있을까...)

어쨌든 authentication을 안거는 상태에서는 전혀 문제가 되지 않더라...

근데 authentication을 거는 순간 왜인지는 모르겠지만 authentication 에러가 뜨고...

그것도 DB 서버 연결(포트까지만 적었을때)는 정상적으로 되는데 그 뒤에 DB name을 적으면 에러가 뜨더라...

var database;
function connectDB() {
    var databaseUrl = 'mongodb://id:password@192.168.0.1:27017/local;
    mongoose.connect(databaseUrl);
    mongoose.Promise = global.Promise;
    database = mongoose.connection;
}

 

이랬더니 미친듯이 에러가 올라오더라....

MongoNetworkError: failed to connect to server [192.168.0.1:27017] on first connect [MongoError: Authentication failed.]

 

또한번의 구글링을 했다.

몽구스에서 특정 데이터베이스에 연결할때 계정을 인증받을 데이터베이스를 별도로 적어줘야 하더군...

그래서 databaseUrl에 파라미터를 추가해줬더니 연결 잘 된다.

var database;
function connectDB() {
    var databaseUrl = 'mongodb://id:password@192.168.0.1:27017/local?authSource=admin&authMechanism=SCRAM-SHA-1;
    mongoose.connect(databaseUrl);
    mongoose.Promise = global.Promise;
    database = mongoose.connection;
}

 

위에 예시에서 계정을 인증받을 데이터베이스는 admin이고 몽고DB에 대해서는 지금 연동 연습해보면서 하는게 첨이라 원래 계정은 다 admin 데이터베이스에 만들어져야 하는건지 다른 데이터베이스에 만들수 있는건지는 모르겠다.

robo3T에서 local 데이터베이스에 계정 만들려고 하다가 실패하기는 했다.

어쨌든 위 형태로 구성하면 인증절차를 거쳐서 mongoose에서 DB 연결이 가능하다는거...

블로그 이미지

ligilo

행복한 하루 되세요~

,