✏️ Setting
📍 Mongoose 설치
npm install mongoose
✏️ node.js 와 연결
📍 기초적인 연결 방식
mongodb://유저:비밀번호@호스트:포트/디비명?authSource=admin
Authentication 이 있다면
?authSource=admin` 을 추가해줘야 연결이 가능하다.
import mongoose from 'mongoose';
const DB_NAME = '';
const USR = '';
const PW = '';
const MONGO_HOST = 'localhost:27017';
const MONGO_URL = `mongodb://${USR}:${PW}@${MONGO_HOST}/${DB_NAME}?authSource=admin`;
mongoose.connect(MONGO_URL, {
useNewUrlParser: true
}).then(() => {
console.log('DB 연결 성공');
}).catch((err) => {
console.error('DB 연결 실패:', err);
📍 추상화와 민감정보 보호
- 위 방식으로 적용해도 작동은 되지만 몇가지 문제점이 발생한다.
- 원격 저장소에 저장할경우 민감정보가 그대로 노출되는 문제
- 다른 DB 로 전환할 때 루트 디랙토리를 전부 수정해야 하는 문제
- 개발환경과 배포환경, 테스트 환경이 분리되지 않은 문제
- 문제들을 해결하기 위해 URL 을 별도로 관리하고, DB 연동 코드를 캡슐화해 모듈로 만들어주는 것이 좋다.
- 민감정보와 개발환경 분리
- 루트디렉토리에
.credentails/development.json
파일을 생성한다.
- 해당 디렉토리에 배포환경 설정파일을 생성하려면
production.json
을 생성하면 된다.
{
"connectionString": "mongodb://${USR}:${PW}@${MONGO_HOST}/${DB_NAME}?authSource=admin"
}
- DB 연결 모듈 만들기
- lib/db 디랙토리에 모듈을 만들어줬다.
- url 을 찾지 못할경우, db 연결에 실패할경우 오류처리를 해줬다.
- 루트파일에서 아래 모듈을 임포트하면 된다.
const mongoose = require('mongoose')
const { connectionString } = require('../../../.credentails/development.json')
if (!connectionString) {
console.error('MongoDB connection string missing!')
process.exit(1)
}
mongoose.connect(connectionString)
const db = mongoose.connection
db.on('error', err => {
console.error('MongoDB error :', err.message)
process.exit(1)
})
db.once('open', () => console.log('MongoDB connection established'))
module.exports = {
getVacations: async () => {
},
addVacationInSeasonListener: async (email, sku) => {
},
}
- 모듈 조립
- 위 모듈을 import 하기만 하면 별도의 작업없이 연동이 완료된다.
require('./lib/mongodb/mdb')
- 서버를 실행하면 db 연결 성공 로그가 출력된다.
MongoDB connection established