관리 메뉴

거니의 velog

(14) mongoose를 이용한 MongoDB 연동 실습 3 본문

React_백엔드 프로그래밍

(14) mongoose를 이용한 MongoDB 연동 실습 3

Unlimited00 2024. 2. 20. 18:10

3. mongoose의 설치 및 적용

* mongoose는 Node.js 환경에서 사용하는 MongoDB 기반 ODM(Object Data Modeling) 라이브러리이다. 이 라이브러리는 데이터베이스 문서들을 자바스크립트 객체처럼 사용할 수 있게 해준다.

* 이전에 만든 백엔드 프로젝트를 이어서 진행해 보겠다. 프로젝트 디렉터리에서 다음 명령어를 입력하여 mongoose와 dotenv를 설치하자.

$ yarn add mongoose dotenv

* dotenv는 환경변수들을 파일에 넣고 사용할 수 있게 하는 개발 도구이다. mongoose를 사용하여 MongoDB에 접속할 때, 서버에 주소나 계정 및 비밀번호가 필요할 경우도 있다. 이렇게 민감하거나 환경별로 달라질 수 있는 값은 코드 안에 직접 작성하지 않고, 환경변수로 설정하는 것이 좋다. 프로젝트를 깃허브(GitHub), 깃랩(GitLab) 등의 서비스에 올릴 때는 .gitgnore를 작성하여 환경변수가 들어 있는 파일은 제외시켜 주어야 한다.


(1) .env 환경변수 파일 생성

* 환경변수에는 서버에 사용할 포트와 MongoDB 주소를 넣어 주겠다. 프로젝트의 루트 경로에 .env 파일을 만들고 다음 내용을 입력하자.

PORT=4000
MONGO_URI=mongodb://localhost:27017/blog

* 여기서 blog는 우리가 사용할 데이터베이스 이름이다. 지정한 데이터베이스가 서버에 없다면 자동으로 만들어 주므로 사전에 직접 생성할 필요는 없다.

* 다음으로 src/index.js 파일의 맨 위에 다음과 같이 dotenv 를 불러와서 config() 함수를 호출해 주어야 한다. Node.js에서 환경변수는 process.env 값을 통해 조회할 수 있다.

require('dotenv').config();
const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');

// 비구조화 할당을 통해 process.env 내부 값에 대한 레퍼런스 만들기
const { PORT } = process.env;
console.log('PORT : ', PORT);

const api = require('./api');

const app = new Koa();
const router = new Router();

// 라우터 설정
router.use('/api', api.routes()); // api 라우트 적용

// 라우터 적용 전에 bodyParser 적용
app.use(bodyParser());

// app 인스턴스에 라우터 적용
app.use(router.routes()).use(router.allowedMethods());

// PORT가 지정되어 있지 않다면 4000을 사용
const port = PORT || 4000;
app.listen(port, () => {
  console.log('Listening to port %d', port);
});

* .env 파일에서 PORT를 4001로 변경한 뒤 서버를 한번 재시작해 보자. .env 파일을 변경할 때는 nodemon에서 자동으로 재시작하지 않으므로 직접 재시작해야 한다.

* 바뀐 포트로 실행된 것을 확인했는가? 이제 다시 4000으로 복구하고 서버를 재시작하자.


(2) mongoose 로 서버와 데이터베이스 연결

* 이제 mongoose를 이용하여 서버와 데이터베이스를 연결하겠다. 연결할 때는 mongoose의 connect 함수를 사용한다.

[src/index.js]

require('dotenv').config();
const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const mongoose = require('mongoose');

// 비구조화 할당을 통해 process.env 내부 값에 대한 레퍼런스 만들기
const { PORT, MONGO_URI } = process.env;

mongoose
  .connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }) // useUnifiedTopology 추가
  .then(() => {
    console.log('Connected to MongoDB...');
  })
  .catch((e) => {
    console.error(e);
  });

const api = require('./api');

const app = new Koa();
const router = new Router();

// 라우터 설정
router.use('/api', api.routes()); // api 라우트 적용

// 라우터 적용 전에 bodyParser 적용
app.use(bodyParser());

// app 인스턴스에 라우터 적용
app.use(router.routes()).use(router.allowedMethods());

// PORT가 지정되어 있지 않다면 4000을 사용
const port = PORT || 4000;
app.listen(port, () => {
  console.log('Listening to port %d', port);
});

* 코드를 저장한 뒤 터미널에서 다음과 같은 문구가 출력되면 데이터베이스에 성공적으로 연결된 것이다.

* 이제 mongoose를 사용하기 위한 준비를 마쳤다.