Express 개발 강좌, CRUD(Create, Read, Update, Delete) API 구현하기

본 강좌에서는 Node.js의 웹 프레임워크인 Express를 사용하여 기본적인 CRUD API를 구현하는 방법을 심도 있게 알아보겠습니다. CRUD는 데이터베이스에서 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 기본적인 작업으로, 대부분의 웹 어플리케이션에서 자주 사용됩니다.

1. 환경 설정

CRUD API를 구현하기 위해 먼저 Node.js와 Express를 설치해야 합니다. Node.js가 설치되어 있지 않은 경우 Node.js 공식 웹사이트에서 설치할 수 있습니다. Node.js를 설치한 후, Express를 프로젝트에 추가합니다.

bash
# 빈 폴더를 생성하고 이동
mkdir express-crud-api
cd express-crud-api

# npm 초기화
npm init -y

# Express 설치
npm install express

2. 프로젝트 구조

먼저 기본적인 프로젝트 구조를 설정합니다. 다음과 같은 파일과 폴더를 생성합니다:

  • express-crud-api/
    • server.js
    • package.json
    • routes/
      • userRoutes.js
    • models/
      • User.js

3. 서버 설정

이제 API 서버를 설정해 보겠습니다. server.js 파일을 열고 다음과 같이 작성합니다. 이 파일은 API 서버의 엔트리 포인트로 작동합니다.

javascript
const express = require('express');
const bodyParser = require('body-parser');
const userRoutes = require('./routes/userRoutes');

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

// Body-parser 미들웨어 설정
app.use(bodyParser.json());

// 유저 라우터 설정
app.use('/api/users', userRoutes);

// 서버 시작
app.listen(PORT, () => {
    console.log(`서버가 http://localhost:${PORT} 에서 실행 중입니다.`);
});

4. 데이터 모델링

기본적으로 우리는 사용자의 정보를 저장할 것이므로, 사용자 모델을 설정해야 합니다. MongoDB를 사용할 것을 가정하고 Mongoose를 설치하여 모델을 설정합니다.

bash
# Mongoose 설치
npm install mongoose

다음으로 models/User.js를 생성하고 아래와 같이 작성합니다.

javascript
const mongoose = require('mongoose');

// Mongoose 스키마 설정
const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    age: {
        type: Number,
        required: true
    }
});

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

module.exports = User;

5. API 라우팅

이제 사용자에 대한 CRUD 작업을 처리하는 API 경로를 설정합니다. routes/userRoutes.js를 생성하고 다음과 같이 작성합니다.

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

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

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

// 사용자 정보 조회 (Read)
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({ message: error.message });
    }
});

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

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

module.exports = router;

6. MongoDB 연결 설정

MongoDB와의 연결을 설정해야 합니다. server.js 파일에 연결 코드를 추가합니다.

javascript
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('MongoDB에 연결되었습니다.'))
    .catch(err => console.error('MongoDB 연결 오류:', err));

7. API 테스트

서버 및 MongoDB 연결이 제대로 되었으면, Postman과 같은 API 클라이언트를 사용하여 API를 테스트할 수 있습니다. 예를 들어:

  • 사용자 생성 (POST): POST http://localhost:3000/api/users에 JSON 형식의 사용자 데이터를 전송합니다.
  • 사용자 목록 조회 (GET): GET http://localhost:3000/api/users를 통해 모든 사용자 정보를 조회합니다.
  • 특정 사용자 조회 (GET): GET http://localhost:3000/api/users/{id}를 통해 특정 사용자의 정보를 조회합니다.
  • 사용자 수정 (PUT): PUT http://localhost:3000/api/users/{id}에 수정할 데이터와 함께 요청합니다.
  • 사용자 삭제 (DELETE): DELETE http://localhost:3000/api/users/{id}를 통해 특정 사용자를 삭제합니다.

8. 결론

이번 강좌를 통해 Express를 사용하여 기본적인 CRUD API를 구현하는 방법을 알아보았습니다. 더 나아가, 데이터베이스와의 연결, API 테스트를 위한 클라이언트 사용법까지 살펴보았습니다. 이 기본적인 구조를 바탕으로 여러분만의 웹 어플리케이션을 구축해 나가시길 바랍니다.

추가적으로, 인증 및 인가 기능을 추가하거나, 테스트 프레임워크를 도입하는 등의 작업을 통해 더욱 발전된 API를 구현할 수 있습니다. 계속해서 학습하고 실습하여 더 나은 백엔드 개발자가 되어 보세요!