OPEN HYPER STEP
← 목록으로 (master-project)
MASTER-PROJECT · 26 / 50
master-project
CHAPTER 26 / 50
읽기 약 2
FUNCTION

API 설계: RESTful 엔드포인트 전체 설계


핵심 개념

REST 원칙·리소스 명사·HTTP 메서드·상태 코드·버저닝·OpenAPI — 전체 엔드포인트 한 번에 설계.

본문

REST 원칙 6가지

📋 코드 (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 전체 엔드포인트

📋 코드 (33줄)
[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 상태 코드

📋 코드 (19줄)
[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

응답 표준 포맷

JSON📋 코드 (20줄)
// 성공
{
  "data": { "id": "...", "result": "..." },
  "meta": { "remaining_quota": 4 }
}

// 에러
{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "분당 10회 초과",
    "retry_after": 30
  }
}

// 목록
{
  "data": [...],
  "meta": { "cursor": "...", "has_more": true }
}

버저닝

📋 코드 (6줄)
1. URL: /api/v1/generations  ← 가장 흔함
2. 헤더: Accept: application/vnd.mysaas.v1+json
3. 쿼리: /api/generations?v=1

추천: URL 버저닝 (간단·명확)
파괴적 변경 시에만 v2 (대부분 v1 유지)

OpenAPI 스펙 (자동 문서)

YAML📋 코드 (24줄)
# 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' }
BASH📋 코드 (3줄)
# 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