프로그래밍 언어/NODE JS

몽고디비 연결하기

· 코딩마이데이

노드와 몽고디비를 몽구스를 통해 연결해보겠습니다. 몽고디비는 주소를 사용해 연결합니다. 주소 형식은 mongodb://[username:password@localhost[:port][/[database][?options]]와 같습니다. [ ] 부분은 없어도 되고 있어도 됨을 의미합니다.

username과 password에 몽고디비 계정 이름과 비밀번호를 넣습니다. host가 localhost, port가 27017, 계정이 있는 database가 admin이므로 주소는 다음과 같이 됩니다.

mongodb://이름:비밀번호@localhost:27017/admin
 

먼저 schemas 폴더를 루트 디렉터리에 생성합니다. 폴더 안에 index.js 파일을 생성한 후 내용을 다음과 같이 넣습니다.

const mongoose = require("mongoose");

const connect = () => {
  if (process.env.NODE_ENV !== "production") {
    mongoose.set("debug", true);
  } // ➊

  mongoose.connect(
    "mongodb://root:1234@localhost:27107/admin",
    {
      dbName: "nodejs",
      useNewUrlParser: true,
      useCreateIndex: true,
    },
    (error) => {
      if (error) {
        console.log("몽고디비 연결 에러", error);
      } else {
        console.log("몽고디비 연결 성공");
      }
    }
  );
}; // ➋
mongoose.connection.on("error", (error) => {
  console.error("몽고디비 연결 에러", error);
}); // ➌
mongoose.connection.on("disconnected", () => {
  console.error("몽고디비 연결이 끝겼습니다. 연결을 재시도합니다.");
  connect();
}); // // ➌

module.exports = connect;

 

➊ 개발 환경일 때만 콘솔을 통해 몽구스가 생성하는 쿼리 내용을 확인할 수 있게 하는 코드입니다.

➋ 몽구스와 몽고디비를 연결하는 부분입니다. 몽고디비 주소로 접속을 시도합니다. 비밀번호(nodejsbook 부분)를 자신의 비밀번호로 바꾸는 것을 잊지 마세요! 접속을 시도하는 주소의 데이터베이스는 admin이지만, 실제로 사용할 데이터베이스는 nodejs이므로 두 번째 인수로 dbName 옵션을 줘서 nodejs 데이터베이스를 사용하게 했습니다. 마지막 인수로 주어진 콜백 함수를 통해 연결 여부를 확인합니다.

useNewUrlParser: true는 입력하지 않아도 되지만 콘솔에 경고 메시지가 나타나므로 넣었습니다.

➌ 몽구스 커넥션에 이벤트 리스너를 달아뒀습니다. 에러 발생 시 에러 내용을 기록하고, 연결 종료 시 재연결을 시도합니다.

app.js를 만들고 schemas/index.js와 연결합니다.

 

app.js를 만들고 schemas/index.js와 연결합니다.

const express = require("express");
const path = require("path");
const morgan = require("morgan");
const nunjucks = require("nunjucks");

const connect = require("./schemas");

const app = express();
app.set("port", process.env.PORT || 3002);
app.set("view engine", "hmtl");
nunjucks.configure("views", {
  express: app,
  watch: true,
});
connect();

app.use(morgan("dev"));
app.use(express.static(path.join(__dirname, "public")));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use((req, res, next) => {
    const error = new Error(`${req.method} ${req._construct.url} 라우터가 없습니다.`);
    error.status = 404;
    next(error);
})

app.use((err, req, next) => {
    res.locals.message = err.message;
    res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
    res.status(err.status || 500);
    res.reder('error');
})

app.listen(app.get('port'), () => {
    console.log(app.get('port'), ' 번 포트에서 대기 중');
});

 

'프로그래밍 언어 > NODE JS' 카테고리의 다른 글

쿼리 수행하기  (0) 2025.10.02
스키마 정의하기  (0) 2025.09.29
몽구스 사용하기  (0) 2025.09.23
CRUD 작업하기  (0) 2025.09.20
데이터베이스 및 컬렉션 생성하기  (0) 2025.09.17