API Response Convention - PIC-2-team/PIC-2-team-project GitHub Wiki

API 응닡 포맷 μ»¨λ²€μ…˜

FE(React) + BE(Spring Boot) 곡톡 약속
졜초 μž‘μ„±: 2026-10-08


곡톡 Envelope

λͺ¨λ“  API 응닡은 μ•„λž˜ ꡬ쑰λ₯Ό λ”°λ₯Έλ‹€.

성곡

{
  "success": true,
  "data": { }
}

μ—λŸ¬

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "이메일은 ν•„μˆ˜μž…λ‹ˆλ‹€"
  }
}

νŽ˜μ΄μ§€λ„€μ΄μ…˜ λͺ©λ‘

{
  "success": true,
  "data": {
    "items": [],
    "pagination": {
      "page": 1,
      "pageSize": 20,
      "totalItems": 142,
      "totalPages": 8
    }
  }
}

HTTP μƒνƒœ μ½”λ“œ

μ½”λ“œ 상황
200 쑰회, μˆ˜μ • 성곡
201 생성 성곡
400 잘λͺ»λœ μš”μ²­ (ν˜•μ‹ 였λ₯˜)
401 미인증
403 인가 μ—†μŒ
404 λ¦¬μ†ŒμŠ€ μ—†μŒ
409 ν˜„μž¬ λ¦¬μ†ŒμŠ€ μƒνƒœμ™€ 좩돌 (쀑볡, 였래된 μˆ˜μ • μ œμ•ˆ λ“±)
422 μœ νš¨μ„± 검증 μ‹€νŒ¨
413 μš”μ²­ 파일/λ³Έλ¬Έ 크기 μ œν•œ 초과
415 μ§€μ›ν•˜μ§€ μ•ŠλŠ” λ―Έλ””μ–΄ νƒ€μž…
500 μ„œλ²„ λ‚΄λΆ€ 였λ₯˜

μ—λŸ¬ μ½”λ“œ

code μ„€λͺ…
VALIDATION_ERROR μž…λ ₯κ°’ 검증 μ‹€νŒ¨
NOT_FOUND λ¦¬μ†ŒμŠ€ μ—†μŒ
UNAUTHORIZED 둜그인 ν•„μš”
FORBIDDEN κΆŒν•œ μ—†μŒ
DUPLICATE 쀑볡 (이메일 λ“±)
CONFLICT ν˜„μž¬ λ¦¬μ†ŒμŠ€ μƒνƒœμ™€ μš”μ²­μ΄ 좩돌
PAYLOAD_TOO_LARGE μš”μ²­ 크기 μ œν•œ 초과
UNSUPPORTED_MEDIA_TYPE μ§€μ›ν•˜μ§€ μ•ŠλŠ” μ½˜ν…μΈ /파일 ν˜•μ‹
INTERNAL_ERROR μ„œλ²„ λ‚΄λΆ€ 였λ₯˜

λ‚ μ§œ 포맷

ISO 8601 톡일

"2026-10-08T14:30:00Z"

FE β€” TypeScript νƒ€μž…

type ApiResponse<T> =
  | { success: true; data: T }
  | { success: false; error: { code: string; message: string } };

type PaginatedData<T> = {
  items: T[];
  pagination: {
    page: number;
    pageSize: number;
    totalItems: number;
    totalPages: number;
  };
};

μœ„ νƒ€μž…μ€ frontend/src/types/common.ts에 μ •μ˜λ˜μ–΄ μžˆλ‹€.


BE β€” Spring Boot 곡톡 클래슀

BE-Setup μ°Έκ³ 


λ³€κ²½ 이λ ₯

λ‚ μ§œ λ‚΄μš© μž‘μ„±μž
2026-10-09 API v1의 μˆ˜μ • μ œμ•ˆ 좩돌 및 파일 μ—…λ‘œλ“œ 였λ₯˜ μ½”λ“œ μΆ”κ°€ Codex
2026-10-08 졜초 μž‘μ„±