Mongoose) 시작하기

알파로그·2023년 12월 14일
0

Node.js

목록 보기
23/25

✏️ 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 연동 코드를 캡슐화해 모듈로 만들어주는 것이 좋다.
  1. 민감정보와 개발환경 분리
    • 루트디렉토리에 .credentails/development.json 파일을 생성한다.
      • 해당 디렉토리에 배포환경 설정파일을 생성하려면 production.json 을 생성하면 된다.
{
  "connectionString": "mongodb://${USR}:${PW}@${MONGO_HOST}/${DB_NAME}?authSource=admin"
}
  1. 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)
}

// useNewUrlParser: true 옵션은 4.0.0 버전 이상부터 사용되지 않는다.
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) => {

    },
}
  1. 모듈 조립
    • 위 모듈을 import 하기만 하면 별도의 작업없이 연동이 완료된다.
require('./lib/mongodb/mdb')
  • 서버를 실행하면 db 연결 성공 로그가 출력된다.
MongoDB connection established
profile
잘못된 내용 PR 환영

0개의 댓글