REST API 구축
AI 도움으로 REST API를 설계하고 구축하는 실전 튜토리얼입니다. Express.js로 백엔드 API를 만들어보세요.
프로젝트 개요
이 튜토리얼에서는 간단한 메모(Memo) API를 만들어봅니다. 기본적인 CRUD(Create, Read, Update, Delete) 기능을 구현합니다.
📋 API 엔드포인트 설계
| 메서드 | 엔드포인트 | 설명 |
|---|---|---|
| GET | /api/memos | 모든 메모 조회 |
| GET | /api/memos/:id | 단일 메모 조회 |
| POST | /api/memos | 새 메모 생성 |
| PUT | /api/memos/:id | 메모 수정 |
| DELETE | /api/memos/:id | 메모 삭제 |
Step 1: 프로젝트 설정
Node.js 프로젝트 초기화와 필수 패키지 설치를 진행합니다.
터미널
# 프로젝트 폴더 생성
mkdir memo-api
cd memo-api
# package.json 초기화
npm init -y
# Express와 필수 패키지 설치
npm install express cors uuid
# 개발 의존성 설치
npm install -D nodemon
💡 팁
nodemon은 코드 변경 시 서버를 자동으로 재시작해주는 도구입니다.
Step 2: AI에게 API 생성 요청
AI 도구에게 Express.js 기반의 메모 API 생성을 요청합니다.
AI에게 요청
Express.js로 간단한 메모 REST API를 만들어줘.
요구사항:
1. Express.js 사용
2. CORS 활성화
3. JSON 본문 파싱
4. CRUD 엔드포인트 구현 (/api/memos)
5. uuid로 고유 ID 생성
6. 에러 처리 포함
7. 포트는 3000번 사용
Step 3: 생성된 코드 확인
AI 도구가 생성한 server.js 파일의 예시입니다:
JavaScript (server.js)
const express = require('express');
const cors = require('cors');
const { v4: uuidv4 } = require('uuid');
const app = express();
const PORT = process.env.PORT || 3000;
// 미들웨어
app.use(cors());
app.use(express.json());
// 인메모리 데이터 저장소
let memos = [];
// GET /api/memos - 모든 메모 조회
app.get('/api/memos', (req, res) => {
res.json(memos);
});
// GET /api/memos/:id - 단일 메모 조회
app.get('/api/memos/:id', (req, res) => {
const memo = memos.find(m => m.id === req.params.id);
if (!memo) {
return res.status(404).json({ error: '메모를 찾을 수 없습니다' });
}
res.json(memo);
});
// POST /api/memos - 새 메모 생성
app.post('/api/memos', (req, res) => {
const { title, content } = req.body;
const newMemo = {
id: uuidv4(),
title,
content,
createdAt: new Date().toISOString()
};
memos.push(newMemo);
res.status(201).json(newMemo);
});
// PUT /api/memos/:id - 메모 수정
app.put('/api/memos/:id', (req, res) => {
const { title, content } = req.body;
const index = memos.findIndex(m => m.id === req.params.id);
if (index === -1) {
return res.status(404).json({ error: '메모를 찾을 수 없습니다' });
}
memos[index] = { ...memos[index], title, content };
res.json(memos[index]);
});
// DELETE /api/memos/:id - 메모 삭제
app.delete('/api/memos/:id', (req, res) => {
const index = memos.findIndex(m => m.id === req.params.id);
if (index === -1) {
return res.status(404).json({ error: '메모를 찾을 수 없습니다' });
}
memos.splice(index, 1);
res.status(204).send();
});
// 서버 시작
app.listen(PORT, () => {
console.log(`서버가 포트 ${PORT}에서 실행 중입니다`);
});
Step 4: API 테스트
서버를 실행하고 API를 테스트합니다.
터미널
# 서버 실행
node server.js
# 또는 nodemon으로 실행 (코드 변경 시 자동 재시작)
npx nodemon server.js
# 환경 변수로 다른 포트 사용
PORT=3001 node server.js
포트 충돌 해결하기
⚠️ "Port 3000 is already in use" 에러가 발생하면?
다른 프로그램이 이미 3000번 포트를 사용 중입니다. 아래 방법으로 해결하세요.
방법 1: 환경 변수로 다른 포트 사용 (권장)
터미널
# 다른 포트로 실행
PORT=3001 node server.js
# 또는 .env 파일 사용
# .env 파일에 PORT=3001 추가
npm install dotenv
node -r dotenv/config server.js
방법 2: 사용 중인 프로세스 종료
macOS/Linux
# 포트 사용 프로세스 찾기
lsof -i :3000
# 결과 예시:
# node 12345 user 23u IPv4 0x1234 TCP *:3000 (LISTEN)
# 프로세스 종료 (PID 사용)
kill -9 12345
# 또는 한 번에 종료
lsof -t -i :3000 | xargs kill -9
Windows
# 포트 사용 프로세스 찾기
netstat -ano | findstr :3000
# 결과 예시:
# TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12345
# 프로세스 종료 (PID 사용)
taskkill /PID 12345 /F
API 테스트 도구 비교
다양한 도구로 API를 테스트할 수 있습니다. 상황에 맞는 도구를 선택하세요.
| 도구 | 타입 | 장점 | 사용 시나리오 |
|---|---|---|---|
| curl | CLI | 빠르고 간단, 스크립트 작성 가능 | 빠른 테스트, CI/CD |
| Postman | GUI | 직관적, 컬렉션 관리, 환경 변수 | 복잡한 API 테스트, 팀 협업 |
| Thunder Client | VS Code 확장 | VS Code 통합, 가벼움 | 개발 중 빠른 테스트 |
| REST Client | VS Code 확장 | 파일 기반, Git 관리 가능 | API 문서화, 버전 관리 |
| HTTPie | CLI | 사용자 친화적 CLI, 컬러 출력 | curl보다 읽기 쉬운 출력 |
1. curl로 테스트
curl 명령어
# 모든 메모 조회
curl http://localhost:3000/api/memos
# 새 메모 생성
curl -X POST http://localhost:3000/api/memos \
-H "Content-Type: application/json" \
-d '{"title": "첫 메모", "content": "메모 내용"}'
# 메모 수정
curl -X PUT http://localhost:3000/api/memos/메모ID \
-H "Content-Type: application/json" \
-d '{"title": "수정된 제목", "content": "수정된 내용"}'
# 메모 삭제
curl -X DELETE http://localhost:3000/api/memos/메모ID
2. Thunder Client로 테스트 (VS Code)
설정 방법
1. VS Code 확장에서 "Thunder Client" 설치
2. 사이드바에서 번개 아이콘 클릭
3. New Request 버튼 클릭
4. 메서드 선택 (GET, POST 등)
5. URL 입력: http://localhost:3000/api/memos
6. Body 탭에서 JSON 입력 (POST/PUT인 경우)
7. Send 버튼 클릭
3. REST Client로 테스트 (.http 파일)
test-api.http
### 모든 메모 조회
GET http://localhost:3000/api/memos
###
### 새 메모 생성
POST http://localhost:3000/api/memos
Content-Type: application/json
{
"title": "첫 메모",
"content": "메모 내용"
}
###
### 메모 수정 (ID를 실제 값으로 변경)
PUT http://localhost:3000/api/memos/abc-123
Content-Type: application/json
{
"title": "수정된 제목",
"content": "수정된 내용"
}
###
### 메모 삭제
DELETE http://localhost:3000/api/memos/abc-123
💡 REST Client 사용법:
- VS Code에서 "REST Client" 확장 설치
test-api.http파일 생성- 위 코드 붙여넣기
- 각 요청 위의 "Send Request" 링크 클릭
4. HTTPie로 테스트 (선택)
HTTPie 설치 및 사용
# 설치 (macOS)
brew install httpie
# 설치 (Ubuntu/Debian)
sudo apt install httpie
# 사용 (curl보다 간결)
http GET http://localhost:3000/api/memos
http POST http://localhost:3000/api/memos title="첫 메모" content="내용"
http PUT http://localhost:3000/api/memos/abc-123 title="수정"
http DELETE http://localhost:3000/api/memos/abc-123
Step 5: 데이터베이스 연동 (선택)
메모리 저장 대신 실제 데이터베이스를 사용해보세요.
AI에게 요청
지금 만든 메모 API에 SQLite 데이터베이스를
연동해줘. better-sqlite3 패키지를 사용하고,
테이블 이름은 memos로 해줘.
📚 추가 데이터베이스 옵션
- SQLite: 가볍고 설정이 간단함
- PostgreSQL: 프로덕션 환경에 적합
- MongoDB: 문서 기반 저장소
API 아키텍처
완성된 API의 아키텍처는 다음과 같습니다:
REST API 아키텍처
다음 단계
이제 REST API를 만들어보는 방법을 배웠습니다. 다음 프로젝트도 도전해 보세요!
핵심 정리
- 프로젝트 설정: npm init으로 프로젝트 초기화
- 요구사항 명시: API 엔드포인트와 기능을 구체적으로 요청
- 코드 생성: Express.js로 CRUD 기능 구현
- 테스트: curl 또는 Postman으로 API 테스트
- 확장: 데이터베이스 연동으로 실제 서비스 구축