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 사용법:
  1. VS Code에서 "REST Client" 확장 설치
  2. test-api.http 파일 생성
  3. 위 코드 붙여넣기
  4. 각 요청 위의 "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의 아키텍처는 다음과 같습니다:

클라이언트 (React, Vue 등) Express.js 서버 SQLite / PostgreSQL / MongoDB GET/POST/PUT/DELETE JSON

REST API 아키텍처

다음 단계

이제 REST API를 만들어보는 방법을 배웠습니다. 다음 프로젝트도 도전해 보세요!

CI/CD 파이프라인

API를 자동으로 배포해보세요

CI/CD 파이프라인 →

백엔드 Vibe Coding

더 다양한 백엔드 프로젝트를 만들어보세요

백엔드 Vibe Coding →

API 디자인

더 나은 API 설계 방법을 배워보세요

API 디자인 →

핵심 정리

  • 프로젝트 설정: npm init으로 프로젝트 초기화
  • 요구사항 명시: API 엔드포인트와 기능을 구체적으로 요청
  • 코드 생성: Express.js로 CRUD 기능 구현
  • 테스트: curl 또는 Postman으로 API 테스트
  • 확장: 데이터베이스 연동으로 실제 서비스 구축