업데이트:

태그: ,

카테고리:

관계형 DB와의 차이점

관계형 데이터베이스, RDBMS는 데이터 형식을 바꾸기 위해서 기존 데이터를 모두 수정해야한다는 번거로움과 확장성이 낮다는 단점이 있다.
MongoDB는 이런 한계를 극복한 NoSQL 데이터 베이스이다.

MongoDB를 사용하면 스키마를 변경해야할 때, 기존 데이터를 수정하지 않아도 되고, 처리해야하는 데이터 양이 늘어나면 여러 컴퓨터로 분산 처리할 수 있도록 되어있다.

설치

  1. (MongoDB사이트)[https://www.mongodb.com/try/download/community] 여기서 OS에 알맞는 버전 다운로드

  2. 다운로드된 파일을 /usr/local/mongodb안에 풀어준다.

  3. bin 안에 mongo를 실행하는 터미널 파일이 있을텐데, 이에 대한 경로를 설정해줘야한다.

  4. zsh기준, vi ~/.zshrc로 들어가서
    export MONGO_PATH=/usr/local/mongodb export PATH=$PATH:$MONGO_PATH/bin 를 설정해줘야한다.

  5. sudo mongod --dbpath=/Users/{username}/data/db로 db가 생성된 경로로 mongod를 실행한다.

  6. 위의 터미널은 그대로 두고, 새로운 터미널에서 mongo 명령어를 치면 mongo shell이 실행된다.

위에서 mongod를 실행한 터미널로 DB의 서버를 열 수 있고, mongo로 접속한 shell에서 shell 명령어로 데이터를 조작할 수 있다.

DB를 끄기 위해서는

pgrep mongo로 얻은 번호를

sudo kill 번호를 하면 DB서버가 종료된다.

mongoose

mongoose는 Node.js 환경에서 사용하는 ODM 라이브러리이다.
이 라이브러리로 DB documents를 JS 객체처럼 사용할 수 있다.

npm i mongoose dotenv

dotenv란 환경변수를 파일에 넣고 사용할 수 있게 해주는 개발 도구이다.

MongoDB에 접속할 때, 서버에 주소나 계정 및 비밀번호가 필요할 경우도 있으므로 환경변수로 작성해두고 깃허브같은 서비스에 올릴때는 .gitignore로 환경변수 파일을 제외한다.

.env

root 경로에 환경변수 파일을 작성한다.

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

환경 변수 파일은 dotenv를 불러와서 .config()함수를 호출하면 사용할 수 있는데, process.env 값으로 조회가 가능.

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

const { PORT } = process.env;

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

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

// 라우터 설정
router.use("/api", api.routes());

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

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

const port = PORT || 4000;
app.listen(port, () => {
  console.log(`listening on ${port}`);
});

그리고 모두 import 구문으로 전환한다.
ESM 모듈 혹은 BABEL을 사용할 수 있는데, 나는 바벨을 사용해 ES6 문법을 nodejs가 이해할 수 있도록 바꿨다.
특히 문제가 됐던게 type을 지정해주지 않아서 에러가 났던 것.

...
"devDependencies": {
    "@babel/core": "^7.16.5",
    "@babel/node": "^7.16.5",
    "@babel/preset-env": "^7.16.5",
    },
"scripts": {
    "dev": "nodemon --exec babel-node src/index.js"
    },
"type": "module"

Mongodb와 연결

import dotenv from "dotenv";
dotenv.config();
const { PORT, MONGO_URI } = process.env;

mongoose
  .connect(MONGO_URI)
  .then(() => {
    console.log("Connected to MongoDB");
  })
  .catch((e) => {
    console.error(e);
  });

댓글남기기