mongoose는 Node.js 환경에서 사용하는 MongoDB 기반 ODM(Object Data Modeling) 라이브러리 입니다.
이 라이브러리는 데이터베이스 문서들을 자바스크립트 객체처럼 사용할 수 있게 해줍니다.
이전의 블로그 만들기를 이어서 진행합니다.
$ yarn add mongoose dotenv
dotenv는 환경변수들을 파일에 넣고 사용할 수 있게 하는 개발 도구입니다.
mongoose를 사용하여 MongoDB에 접속할 때 서버에 주소나 계정 및 비밀번호가 필요할 수 있는데 이렇게 민감한 값은 코드안에 직접 작성하지 않고 환경변수로 설정하는 것을 추천합니다.
프로젝트를 GitHub, GitLab 등의 서비스에서 관리할 경우 .gitignore 에 환경변수 파일을 등록하여 GitHub에 올리지 않도록 합니다.
.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;
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에서 자동으로 재시작하지 않으므로 직접 재시작해야 합니다.
다시 .env 파일에서 PORT를 4000번으로 변경하고 저장합니다.
mongoose로 서버와 데이터베이스 연결
연결할 때는 mongoose의 connet 함수를 사용합니다.
require('dotenv').config();
const Koa = require('koa');
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
const mongoose = require('mongoose');
const api = require('./api');
// 비구조화 할당을 통해 process.env 내부 값에 대한 레퍼런스 만들기
const { PORT, MONGO_URI } = process.env;
mongoose
.connect(MONGO_URI)
.then(() => {
console.log('Connected to MongoDB');
})
.catch((e) => {
console.error(e);
});
(...)
코드를 저장한 뒤 yarn start:dev 로 다시 서버를 재시작 합니다.
다음과 같이 터미널에 출력되면 데이터베이스에 성공적으로 연결된 것 입니다.
'리액트(React)' 카테고리의 다른 글
웹사이트 Build 및 깃허브(Github) Pages로 배포하기 (0) | 2023.08.15 |
---|---|
esm으로 ES 모듈 import/export 문법 사용하기 (0) | 2023.07.13 |
블로그 만들기 - 컨트롤러 파일 작성 (0) | 2023.07.05 |
블로그 만들기 - Postman의 설치 및 사용 (0) | 2023.07.05 |
블로그 만들기 - koa-router 사용하기 (0) | 2023.07.04 |