본문 바로가기
북마크/Q&A

Node.js와 MongoDB 연동

by david100gom 2025. 2. 4.

Node.js와 MongoDB를 연동하여 개발하는 기본적인 과정은 다음과 같습니다.


1. 프로젝트 초기 설정

mkdir node-mongo-app && cd node-mongo-app
npm init -y

2. 필요한 패키지 설치

npm install express mongoose dotenv
  • express → 서버 개발을 위한 프레임워크
  • mongoose → MongoDB ODM(Object-Document Mapping) 라이브러리
  • dotenv → 환경 변수 관리

3. MongoDB 연결 (Mongoose 사용)

.env 파일을 생성하고 MongoDB 연결 정보를 추가합니다.

MONGO_URI=mongodb://localhost:27017/mydatabase
PORT=3000

이제 server.js를 생성하고 MongoDB에 연결합니다.

server.js

require("dotenv").config();
const express = require("express");
const mongoose = require("mongoose");

const app = express();
const PORT = process.env.PORT || 3000;

// MongoDB 연결
mongoose.connect(process.env.MONGO_URI, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.on("error", console.error.bind(console, "MongoDB 연결 실패:"));
db.once("open", () => console.log("MongoDB 연결 성공"));

// 기본 라우트
app.get("/", (req, res) => {
  res.send("Node.js + MongoDB 서버 실행 중...");
});

app.listen(PORT, () => {
  console.log(`서버 실행 중: http://localhost:${PORT}`);
});

4. MongoDB 모델 생성

MongoDB에서 사용할 User 모델을 정의합니다.

models/User.js

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  name: String,
  email: { type: String, unique: true },
  age: Number,
});

module.exports = mongoose.model("User", userSchema);

5. REST API 생성 (CRUD 구현)

이제 routes/userRoutes.js를 만들어 API를 추가합니다.

routes/userRoutes.js

const express = require("express");
const User = require("../models/User");
const router = express.Router();

// 사용자 생성 (C)
router.post("/", async (req, res) => {
  try {
    const newUser = new User(req.body);
    await newUser.save();
    res.status(201).json(newUser);
  } catch (error) {
    res.status(400).json({ error: error.message });
  }
});

// 모든 사용자 조회 (R)
router.get("/", async (req, res) => {
  try {
    const users = await User.find();
    res.json(users);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

// 특정 사용자 조회 (R)
router.get("/:id", async (req, res) => {
  try {
    const user = await User.findById(req.params.id);
    if (!user) return res.status(404).json({ message: "사용자 없음" });
    res.json(user);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

// 사용자 정보 수정 (U)
router.put("/:id", async (req, res) => {
  try {
    const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, {
      new: true,
    });
    res.json(updatedUser);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

// 사용자 삭제 (D)
router.delete("/:id", async (req, res) => {
  try {
    await User.findByIdAndDelete(req.params.id);
    res.json({ message: "사용자 삭제 완료" });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

module.exports = router;

6. 서버에 라우트 추가

server.js에서 API 라우트를 등록합니다.

server.js 업데이트

app.use(express.json()); // JSON 요청 처리
app.use("/users", require("./routes/userRoutes"));

7. 서버 실행

node server.js

또는 nodemon을 사용하면 자동 리로드됩니다.

npm install -g nodemon
nodemon server.js

8. Postman 또는 cURL을 이용한 테스트

1) 사용자 추가 (POST)

curl -X POST http://localhost:3000/users \
     -H "Content-Type: application/json" \
     -d '{"name": "홍길동", "email": "hong@example.com", "age": 25}'

2) 모든 사용자 조회 (GET)

curl -X GET http://localhost:3000/users

3) 특정 사용자 조회 (GET)

curl -X GET http://localhost:3000/users/USER_ID

4) 사용자 수정 (PUT)

curl -X PUT http://localhost:3000/users/USER_ID \
     -H "Content-Type: application/json" \
     -d '{"name": "김철수", "age": 30}'

5) 사용자 삭제 (DELETE)

curl -X DELETE http://localhost:3000/users/USER_ID

정리

  1. Node.js + Express로 서버 구축
  2. Mongoose를 사용하여 MongoDB와 연동
  3. REST API를 활용한 CRUD 기능 구현
  4. Postman 또는 cURL로 API 테스트

이제 기본적인 Node.js + MongoDB 연동 개발이 완료되었습니다!
추가적으로 JWT 인증, Swagger 문서화, AWS 배포 등을 진행할 수도 있습니다.

추가 질문이나 상세 구현이 필요하면 알려주세요! 🚀

댓글