본 강좌에서는 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를 구현할 수 있습니다. 계속해서 학습하고 실습하여 더 나은 백엔드 개발자가 되어 보세요!