반응형

이 글에서는 이전에 작성한 Node.js와 Express로 간단한 RESTful APIMongoDB를 연동하여 데이터를 영구적으로 저장하고 관리하는 방법을 소개합니다. Mongoose 라이브러리를 활용하여 MongoDB와의 통신을 더 쉽게 처리하는 방법을 보여드리겠습니다.

1. MongoDB와 Mongoose 설치

1.1 MongoDB 설치

  1. 로컬 MongoDB 설치:
    • 운영 체제에 맞는 MongoDB를 설치합니다.
    • MongoDB 다운로드 페이지에서 설치 가능.
    • 설치 후 MongoDB 서버를 실행:
      bash
       
      mongod --dbpath /path/to/your/data
  2. Atlas를 사용한 클라우드 MongoDB:

1.2 Mongoose 설치

  1. 프로젝트 디렉터리로 이동하여 Mongoose 설치:
    bash
     
    npm install mongoose

2. MongoDB 연결 설정

2.1 MongoDB와 연결

server.js에서 Mongoose를 사용하여 MongoDB에 연결합니다.

javascript
 
const mongoose = require('mongoose');

// MongoDB URI
const mongoURI = 'mongodb://localhost:27017/restapi_demo'; // 로컬 MongoDB
// const mongoURI = 'your-mongo-atlas-uri'; // Atlas URI

// MongoDB 연결
mongoose
  .connect(mongoURI, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('MongoDB 연결 성공!'))
  .catch((err) => console.error('MongoDB 연결 실패:', err));

3. MongoDB 데이터 모델링

3.1 Mongoose 스키마와 모델 생성

MongoDB의 데이터를 관리하기 위해 Mongoose 스키마와 모델을 정의합니다. models/User.js 파일을 생성하고 아래와 같이 작성합니다.

javascript
 
const mongoose = require('mongoose');

// 사용자 스키마 정의
const UserSchema = new mongoose.Schema({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  age: { type: Number },
  createdAt: { type: Date, default: Date.now },
});

// 모델 생성
const User = mongoose.model('User', UserSchema);

module.exports = User;

4. API 엔드포인트 수정

4.1 사용자 CRUD 기능 구현

server.js 파일에서 MongoDB와 연동하여 CRUD(Create, Read, Update, Delete) 기능을 구현합니다.

1) 사용자 생성 (POST 요청)

javascript
 

const User = require('./models/User');

app.post('/users', async (req, res) => {
  try {
    const newUser = new User(req.body); // 요청 데이터로 사용자 생성
    const savedUser = await newUser.save(); // MongoDB에 저장
    res.status(201).json(savedUser);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});


2) 사용자 조회 (GET 요청)

javascript
 
// 모든 사용자 조회
app.get('/users', async (req, res) => {
  try {
    const users = await User.find(); // 모든 사용자 검색
    res.json(users);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// 특정 사용자 조회
app.get('/users/:id', async (req, res) => {
  try {
    const user = await User.findById(req.params.id);
    if (!user) return res.status(404).json({ error: '사용자를 찾을 수 없습니다.' });
    res.json(user);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

3) 사용자 업데이트 (PUT 요청)

javascript
 
app.put('/users/:id', async (req, res) => {
  try {
    const updatedUser = await User.findByIdAndUpdate(req.params.id, req.body, {
      new: true,
    });
    if (!updatedUser) return res.status(404).json({ error: '사용자를 찾을 수 없습니다.' });
    res.json(updatedUser);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

4) 사용자 삭제 (DELETE 요청)

javascript
 
app.delete('/users/:id', async (req, res) => {
  try {
    const deletedUser = await User.findByIdAndDelete(req.params.id);
    if (!deletedUser) return res.status(404).json({ error: '사용자를 찾을 수 없습니다.' });
    res.json({ message: '사용자가 삭제되었습니다.' });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

5. 실행 및 테스트

5.1 서버 실행

bash
 
node server.js

5.2 Postman 또는 브라우저로 테스트

  • POST 요청: 사용자 생성.
  • GET 요청: 사용자 조회.
  • PUT 요청: 사용자 정보 업데이트.
  • DELETE 요청: 사용자 삭제.

6. 결론

MongoDB를 연동하여 Express API를 확장하면 데이터를 영구적으로 저장할 수 있습니다. 이를 통해 간단한 RESTful API가 더욱 강력해지고 실제 애플리케이션 환경에서 활용 가능해집니다. 다음 글에서는 **JWT(JSON Web Token)**를 사용하여 인증 기능을 추가하는 방법을 다뤄보겠습니다.

이 글이 유용했다면 댓글로 의견을 남겨주세요!

반응형

+ Recent posts