master-project
CHAPTER 26 / 50
읽기 약 2분
FUNCTION
API 설계: RESTful 엔드포인트 전체 설계
핵심 개념
REST 원칙·리소스 명사·HTTP 메서드·상태 코드·버저닝·OpenAPI — 전체 엔드포인트 한 번에 설계.
본문
REST 원칙 6가지
1. Resource = 명사 (URL) /generations ✓ /createGen ✗
2. Method = 동사 (HTTP) POST /generations
3. Status = 결과 표준 200/201/400/401/404/429/500
4. Stateless = 매 요청 독립 토큰만으로 인증
5. Cacheable = HTTP 캐시 활용
6. Layered = 클라이언트는 서버 내부 모름My SaaS 전체 엔드포인트
[Auth]
POST /api/auth/login — 이메일/비밀번호 로그인
POST /api/auth/signup — 회원가입
POST /api/auth/logout — 로그아웃
GET /api/auth/me — 현재 사용자
[Generations] (메인)
POST /api/generations — AI 생성
GET /api/generations — 목록 (검색·필터)
GET /api/generations/:id — 상세
PATCH /api/generations/:id — 수정
DELETE /api/generations/:id — 삭제
[Templates]
GET /api/templates — 템플릿 목록
GET /api/templates/:id — 템플릿 상세
[Subscriptions]
GET /api/subscriptions/me — 현재 구독
POST /api/stripe/checkout — Stripe Checkout 세션
POST /api/stripe/portal — Customer Portal
POST /api/stripe/webhook — Stripe Webhook
[Usage]
GET /api/usage — 사용량
[Files]
POST /api/files/upload — 파일 업로드 (Storage)
DELETE /api/files/:id — 삭제
[Notifications]
GET /api/notifications — 목록
PATCH /api/notifications/read-all — 모두 읽음HTTP 상태 코드
[2xx]
200 OK GET·PATCH·DELETE 성공
201 Created POST 성공 (Location 헤더)
204 No Content 응답 본문 없음
[4xx — 클라이언트 잘못]
400 Bad Request 입력값 오류
401 Unauthorized 인증 누락
403 Forbidden 권한 부족
404 Not Found
409 Conflict 중복
422 Unprocessable 검증 실패
429 Too Many Rate limit
[5xx — 서버 잘못]
500 Internal Error
502 Bad Gateway 업스트림 에러
503 Service Unavailable
504 Gateway Timeout응답 표준 포맷
// 성공
{
"data": { "id": "...", "result": "..." },
"meta": { "remaining_quota": 4 }
}
// 에러
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "분당 10회 초과",
"retry_after": 30
}
}
// 목록
{
"data": [...],
"meta": { "cursor": "...", "has_more": true }
}버저닝
1. URL: /api/v1/generations ← 가장 흔함
2. 헤더: Accept: application/vnd.mysaas.v1+json
3. 쿼리: /api/generations?v=1
추천: URL 버저닝 (간단·명확)
파괴적 변경 시에만 v2 (대부분 v1 유지)OpenAPI 스펙 (자동 문서)
# openapi.yaml
openapi: 3.0.0
info:
title: My SaaS API
version: 1.0.0
paths:
/api/generations:
post:
summary: AI 생성
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
prompt: { type: string, maxLength: 500 }
required: [prompt]
responses:
'201':
description: Created
content:
application/json:
schema: { $ref: '#/components/schemas/Generation' }# Swagger UI 자동 생성
pnpm add @scalar/api-reference-react
# /api/docs 페이지에서 인터랙티브 API 문서다음 챕터
CH.27 "CRUD API: Supabase + Server Actions".
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 마스터 프로젝트의 API 설계 부분을 분석해서 실전 적용 + 개선 우선순위 3가지를 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
API 설계 관련 모범 사례·안티패턴 5개를 비교 분석해서 실전 적용를 위한 추천 방안을 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 프로젝트 전체에서 API 설계 최적화 가능 위치와 리스크를 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 1인 개발자 시장의 API 설계 트렌드와 차별화 포인트를 정리해줘.
⭐ 이것만 기억하세요
API 설계: RESTful 엔드포인트 전체 설계는 이 3가지만 확실히 잡으세요
1.REST = 리소스 명사 + HTTP 동사 + 표준 상태 코드
2.응답 포맷 통일 + 버저닝 + OpenAPI = 운영 표준
3.다음 챕터에서 CRUD 구현
공유하기
진행도 26 / 50