[출처] https://onemooon.tistory.com/entry/Node-JS-module-mongoose%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-mongoDB%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%9E%90
기본적인 Mongoose 사용법을 차근차근 포스팅 하고자 한다.
연결하는데는 크게 문제 없었는데 warning 하나가 뜨면서 약간의 connection 수정을 여기에 적어보겠다.
일단 핵심 모듈인 mongoose 를 받는다
1 2 3 | const mongoose = require('mongoose'); //npm i mongoose --save || yarn add mongoose --save | cs |
var 대신에 const를 쓰는 이유는 이 mongoose 모듈은 변할 필요가 없기 때문이다. const와 var의 차이는 MDN 문서에 자세히 나와있다.
나는 mongoDB를 mlab.com 이라는 곳에서 무료 호스팅을 통해서 이용하고 있다.
나중에 한번 포스팅을 할 예정이고 생각보다 어렵지 않으니 구글링을 통해서 mlab.com 계정을 만든 뒤 따라하는 것을 추천한다.
그 다음에 이 글을 쓰는 핵심인 기본 연결에 대해서 살펴보자 일단 코드를 바꾸기 전 이전 코드를 먼저 써보겠다 .
1 2 3 4 5 6 7 | mongoose.connect('mongodb://'+secret.databaseString+'@ds00000.mlab.com:00000/name',opts); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open',function(){ console.log('FreshbankdDB DataBase is connected with mongoose!'); }); | cs |
그 다음 아래 바꾼 현재 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // DataBase const DB_options = { useMongoClient: true, autoIndex: false, // Don't build indexes reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect reconnectInterval: 500 , // Reconnect every 500ms poolSize: 10 , // Maintain up to 10 socket connections // If not connected, return errors immediately rather than waiting for reconnect bufferMaxEntries: 0, promiseLibrary: require('bluebird') } mongoose.connect( _localhost? config.DB_String : process.env.DB_String , DB_options ).then( () => { console.log('DataBase is connected'); } , err => { console.error.bind(console,'Check DB - Connection error : '); } ) | cs |
자 어떻게 보면 위의 것이 더 간단해 보일 수가 있지만 예전에는 localhost 체크나 options를 주지 않았기 때문이다 동일한 체크를 했다면 더 복잡했을 것이다.
눈에 띄는 차이점은 options를 넣는 것과 error 와 open 이벤트를 한번에 처리한다는 점이다. 하나하나 살펴보자
DB option 이다 Warning 페이지를 살펴보니 이러한 옵션과 더불어서 사용하라고 하였다.
( 자세한 내용을 참고하고 싶다면 mongoose-connection-docs에 options에 나와있다. )
useMongoClient > 4.11 버전부터 새로운 어플리케이션을 만든다면 true로 할당한다는 말이다.
autoIndex > mongoose가 실행될때 자동으로 index관련 설정을 해주는데 간단한 어플리케이션에서는 좋지만 큰 어플리케이션에서는 오히려 퍼포먼스가 떨어질 수 있다고 한다. 상황에 맞춰서 true/false 로 설정하자. 기본은 flase이다.
reconnectTries > 이름만 봐도 알듯이 얼마나 연결할 것인지 묻는 설정이다. 주석을 보면 알듯이 굳이 다르게 지정해 줄 필요가 없다 . 상황에 맞춰 바꾸자
reconnectInterval > 연결 재시도를 몇초 간격으로 할 것인지 설정 해준다.
poolSize > MongoDB 드라이버에서 얼마만큼의 소켓을 열어 놓을 것인지 묻는다. default 는 5 로 설정이 되어있는데 상황에 맞춰서 바꾸면 될듯 하다.
bufferMaxEntries > MogoDB에 기본적으로 bufferCommand 라는 것이 있는데 이는 어떤 연결이 끊어졌을때 재연결을 기다릴 것인지 묻는 것이다. 0 으로 설정하면 이를 false로 만들어 (bufferCommands
to false)
즉시 실패를 호출한다.
promiseLibrary > promise를 사용할때 어떤 모듈을 사용할 것인지 묻는다 ES6가 지원되어야 하고 유명한 모듈은 bluebird가 있다. bluebird 사용법 또한 나중에 포스팅 할 예정이다.
( 참고 MongoDB API / bluebird )
이제 연결 부분을 살펴보자
mongoose.connect면 끝이다.
먼저 두개의 인자를 받는데 첫번째 인자는 db_URI 이다. ( 연결하고 싶은 mongoDB host )
mlab을 사용한 기준으로 URI를 작성하자면 mongodb://<dbuser>:<dbpassword>@ds00000.mlab.com:00000/db_name 이렇게 될것이다. mlab 페이지에서 DB를 만들면 관리 페이지 상단에서 확인할 수 있다. 이를 _localhost에 따라서 다른 경로에 넣은 것이다.
나 같은 경우는 _localhost라는 Boolean 변수를 만들어 _localhost 변수가 true 라면 .gitignore에 등록한 config라는 모듈을 가져와 uri를 처리하였고,
호스팅 하였을 경우는 _localhost 변수가 false 가 되어 지정해놓은 process.env.DB_string 을 처리하였다.
두번째 인자로는 위에서 작성한 DB_options를 넣는다.
그 다음 .then 이 보이는데 then은 ES6에서 새로나온 메서드이다. (참고 MDN.then )
위의 connect가 성공했을때 then을 실행한다고 생각하면 된다. 케이스에 따라서 성공하였을 경우 () => {} 라는 에로우펑션을 통해서 console을 찍으면 될것이고,
실패하였을 경우 err라는 값을 넘긴 console을 찍으면 될것이다. bind는 .error메서드를 console이라는 객체에서 사용할 수 있게끔 만들어 준다는 뜻이다.
'Language > JavaScript' 카테고리의 다른 글
JavaScript Object[‘key’] vs Object.key 차이 (0) | 2019.05.09 |
---|---|
header 정보 json 형태로 가져오기 (2) | 2019.04.08 |
new Date & ISO String (1) | 2019.02.18 |
[nodejs] mongoose 커넥션 이벤트 함수 (1) | 2019.02.14 |
Monitoring MongoDB connection status (0) | 2019.02.14 |