🌐
EPISODE 05
자원/행위 · HTTP 메서드 · 상태 코드 · JSON · JSON 영속화 · dotenv · .gitignore
REST API · 파일 DB와 .env
REST 아키텍처 원칙(자원·행위·표현), HTTP 메서드별 역할(GET/POST/PUT/PATCH/DELETE), 상태 코드(200/201/400/404/500), express.json()을 익혀 RESTful API를 만듭니다. 메모리에만 저장하던 데이터를 JSON 파일로 영속화하고, .env로 환경 변수를 안전하게 관리하는 방법을 익힙니다.
RESTAPIHTTPJSON DBdotenv.env
소요 시간
⏱ 45~60분 + 30~45분
난이도
📊 중급
선수 조건
🎯 node-04
결과물
GET·POST·PUT·DELETE 모두 지원하는 todos API / 재시작해도 데이터가 유지되는 작은 API
이 강의에서 배우는 것
- 1REST URL을 자원(명사 복수형)으로 설계한다
- 2HTTP 메서드별 역할과 멱등성을 안다
- 3주요 상태 코드(2xx/4xx/5xx)를 적절히 반환한다
- 4express.json()으로 POST 바디를 파싱한다
- 5curl이나 Thunder Client로 API를 테스트한다
- 6fs로 JSON 파일을 읽고 쓰는 헬퍼를 작성한다
- 7dotenv로 .env의 환경 변수를 process.env로 로드한다
- 8PORT/NODE_ENV/DB_PATH 같은 환경 변수를 활용한다
- 9.env와 data/를 .gitignore에 등록한다
REST API
REST 아키텍처 원칙(자원·행위·표현), HTTP 메서드별 역할(GET/POST/PUT/PATCH/DELETE), 상태 코드(200/201/400/404/500), express.json()을 익혀 RESTful API를 만듭니다.
1. REST 핵심 개념
| 개념 | 설명 | 예시 |
|---|---|---|
| 자원(Resource) | API가 다루는 데이터 | 할 일, 유저, 상품 |
| 행위(Verb) | 자원에 대한 작업 | 조회, 생성, 수정, 삭제 |
| 표현(Representation) | 데이터 형식 | JSON |
URL 설계 원칙
text
자원은 명사·복수형, 행위는 HTTP 메서드로
GET /todos → 할 일 목록
GET /todos/1 → 특정 할 일
POST /todos → 할 일 생성
PUT /todos/1 → 전체 수정
PATCH /todos/1 → 일부 수정
DELETE /todos/1 → 삭제2. HTTP 메서드별 역할
| 메서드 | 역할 | 멱등성 | 바디 |
|---|---|---|---|
| GET | 조회 | O | X |
| POST | 생성 | X | O |
| PUT | 전체 수정 | O | O |
| PATCH | 일부 수정 | O | O |
| DELETE | 삭제 | O | X |
3. HTTP 상태 코드
text
2xx 성공
200 OK → 요청 성공
201 Created → 생성 성공
204 No Content → 응답 바디 없음
4xx 클라이언트 오류
400 Bad Request → 잘못된 요청
401 Unauthorized → 인증 필요
403 Forbidden → 권한 없음
404 Not Found → 자원 없음
5xx 서버 오류
500 Internal Server Errorjavascript
res.status(201).json({ id: 1, message: '생성 완료' });
res.status(404).json({ error: '항목을 찾을 수 없습니다.' });
res.status(500).json({ error: '서버 오류가 발생했습니다.' });4. JSON 응답
javascript
res.json({
success: true,
data: { id: 1, title: '할 일 1' },
});
res.json([
{ id: 1, title: '할 일 1' },
{ id: 2, title: '할 일 2' },
]);5. express.json() 미들웨어
javascript
app.use(express.json());
app.post('/todos', (req, res) => {
const { title, done } = req.body;
console.log(title, done);
});6. API 테스트
Thunder Client (VS Code)
VS Code에서 바로 API 테스트 가능.
curl
bash
# GET
curl http://localhost:3000/api/todos
# POST
curl -X POST http://localhost:3000/api/todos \
-H "Content-Type: application/json" \
-d '{"title": "Node.js 공부", "done": false}'
# DELETE
curl -X DELETE http://localhost:3000/api/todos/1파일 DB와 .env
메모리에만 저장하던 데이터를 JSON 파일로 영속화하고, .env로 환경 변수를 안전하게 관리하는 방법을 익힙니다.
1. 왜 JSON 파일 DB?
지금까지 만든 API는 데이터를 메모리(배열)에 저장 → 서버 재시작 시 모두 사라짐. JSON 파일로 영속화하면 재시작해도 유지됩니다.
text
요청 → Express → JSON 파일 읽기 → 처리 → JSON 파일 쓰기 → 응답2. JSON 파일 읽기/쓰기 헬퍼
javascript
const fs = require('fs');
const path = require('path');
const DB_PATH = path.join(__dirname, 'data', 'db.json');
function readDB() {
if (!fs.existsSync(DB_PATH)) return [];
const raw = fs.readFileSync(DB_PATH, 'utf-8');
return JSON.parse(raw);
}
function writeDB(data) {
const json = JSON.stringify(data, null, 2);
fs.writeFileSync(DB_PATH, json, 'utf-8');
}3. dotenv
bash
npm install dotenv.env 파일
text
PORT=3000
NODE_ENV=development
DB_PATH=./data/db.json사용
javascript
// 반드시 파일 맨 위에
require('dotenv').config();
const PORT = process.env.PORT || 3000;
const NODE_ENV = process.env.NODE_ENV;⚠️
.env는 반드시 .gitignore에 추가해 git에 올리지 않습니다.
4. 환경 변수 활용
| 변수 | 용도 |
|---|---|
| PORT | 서버 포트 |
| NODE_ENV | 환경 구분 (development/production) |
| DB_PATH | 데이터 파일 경로 |
| JWT_SECRET | 인증 시크릿 키 |
5. 데이터 폴더 구조
text
프로젝트/
├── app.js
├── .env
├── .gitignore
├── package.json
└── data/
└── contacts.json ← 자동 생성text
# .gitignore
node_modules/
.env
data/댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 주세요.
댓글은 회원만 쓸 수 있습니다.
광고·욕설·비방·개인정보·불법 내용이 담긴 댓글은 숨기거나 지웁니다. 댓글은 닉네임과 함께 공개됩니다. 개인정보처리방침