2-4. MongoDB 클라이언트 설치, 및 서버 준비작업하기
스키마와 모델을 만들었으면, 우리가 만든 모델을 통해 직접 데이터베이스에 접근하여 데이터를 읽고 쓸 차례입니다! 하지만, 본격적으로 이 작업을 시작하기전에, 몇몇 준비작업을 거치도록 하겠습니다.
MongoDB 클라이언트, Robomongo 설치하기
만약에 여러분들이 MongoDB 를 PC 에 설치했다면, mongo
명령어를 통하여 데이터베이스에 접속하여 데이터를 조회 할 수 있습니다. 하지만 이는 초반에는 조금 불편 할 수도 있는데요, 편의를 위하여 우리는 GUI 가 있는 MongoDB 클라이언트인 Robomongo 라는 소프트웨어를 설치하여 사용하도록 하겠습니다.
다운로드 페이지에서 여러분의 운영체제에 맞는 버전을 설치하세요.
사용하기
설치 후 프로그램을 실행하면 다음과 같은 창이 나타납니다.
상단의 create 를 누르고, 로컬에서 MongoDB 서버를 돌리고있을 경우에는 Name 부분에 원하는 이름을 적고 바로 Save 를 하면 되며, 만약에 mLab 에서 호스팅을 받았을 경우에는 다음과 같이 설정을 하세요:
계정 정보에는 이전에 만들었던 계정을 넣어줍니다.
bodyParser 적용하기
API 기능을 구현하기 전에 우리는 koa-bodyparser
라는 미들웨어를 적용해야 합니다. 이 미들웨어는 POST/PUT 등의 메소드의 Request Body 에 JSON 형식으로 데이터를 넣어주면 이를 파싱해서 서버측에서 사용 할 수 있도록 해줍니다.
설치
$ yarn add koa-bodyparser
미들웨어 적용
src/index.js
require('dotenv').config(); // .env 파일에서 환경변수 불러오기
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
const api = require('./api');
const mongoose = require('mongoose');
const bodyParser = require('koa-bodyparser');
mongoose.Promise = global.Promise; // Node 의 네이티브 Promise 사용
// mongodb 연결
mongoose.connect(process.env.MONGO_URI).then(
(response) => {
console.log('Successfully connected to mongodb');
}
).catch(e => {
console.error(e);
});
const port = process.env.PORT || 4000; // PORT 값이 설정되어있지 않다면 4000 을 사용합니다.
app.use(bodyParser()); // 바디파서 적용, 라우터 적용코드보다 상단에 있어야합니다.
router.use('/api', api.routes()); // api 라우트를 /api 경로 하위 라우트로 설정
app.use(router.routes()).use(router.allowedMethods());
app.listen(port, () => {
console.log('heurm server is listening to port ' + port);
});
이제, bodyParser 를 적용하였으니, 다음과 같은 형식으로 body 에 있는 JSON 객체를 사용 할 수 있게 됩니다.
app.use(async ctx => {
// 아무것도 없으면 {} 가 반환됩니다.
ctx.body = ctx.request.body;
});
NODE_PATH 설정하기
우리가 만든 모델을 books.controller.js 파일에서 사용하려면 다음과 같이 코드를 불러와야하는데요,
const Book = require('../../models/book');
../../
를 써야한다는것은 은근히 보기에 안 좋습니다. 헷갈리기도 하구요. 이를 깔끔하게 작성 할 수 있는 방법이 있는데, 바로, NODE_PATH 를 설정하는 것 입니다.
package.json 파일의 스크립트 부분에서, NODE_PATH 를 src로 설정하고나면, 프로젝트의 루트 디렉토리를 src 로 지정하게되어, require('models/book')
과 같은 형식으로 파일을 불러올 수 있게 해줍니다.
"scripts": {
"start": "NODE_PATH=src node src",
"start:dev": "NODE_PATH=src nodemon --watch src/ src/index.js"
}
만약에 윈도우 사용자라면, cross-env 를 설치하고 스크립트의 앞부분에 cross-env 를 넣어주세요
$ yarn add cross-env
"scripts": {
"start": "cross-env NODE_PATH=src node src",
"start:dev": "cross-env NODE_PATH=src nodemon --watch src/ src/index.js"
}
.jsconfig.json 생성
절대 경로로 불러온 파일도, IDE 에서 자동완성이 제대로 되도록 .jsconfig.json 파일을 프로젝트 루트 디렉토리 만들어주겠습니다.
.jsconfig.json
{
"compilerOptions": {
"baseUrl": "./src"
}
}