← 홈페이지 5강 목록으로
🌐
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조회OX
POST생성XO
PUT전체 수정OO
PATCH일부 수정OO
DELETE삭제OX

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 Error
javascript
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/
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗

댓글 0

아직 댓글이 없습니다. 첫 댓글을 남겨 주세요.

댓글은 회원만 쓸 수 있습니다.

광고·욕설·비방·개인정보·불법 내용이 담긴 댓글은 숨기거나 지웁니다. 댓글은 닉네임과 함께 공개됩니다. 개인정보처리방침