Skip to content

Latest commit

ย 

History

History
417 lines (362 loc) ยท 21.1 KB

File metadata and controls

417 lines (362 loc) ยท 21.1 KB

API Specification

๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ: 2026-02-11

Base URL

Environment URL
Local http://localhost:8080/api
Dev https://dev-api.finders.it.kr/api
Production https://api.finders.it.kr/api

Response Format

Success Response

{
  "success": true,
  "code": "MEMBER_200",
  "message": "ํšŒ์› ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.",
  "timestamp": "2025-01-15T12:00:00",
  "data": {
    "id": 1,
    "nickname": "finder",
    "email": "user@example.com"
  }
}

Error Response

{
  "success": false,
  "code": "MEMBER_404",
  "message": "ํšŒ์›์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.",
  "timestamp": "2025-01-15T12:00:00",
  "data": null
}

Paginated Response

{
  "success": true,
  "code": "STORE_200",
  "message": "ํ˜„์ƒ์†Œ ๋ชฉ๋ก ์กฐํšŒ์— ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.",
  "timestamp": "2025-01-15T12:00:00",
  "data": [...],
  "pagination": {
    "page": 0,
    "size": 20,
    "total_elements": 100,
    "total_pages": 5,
    "first": true,
    "last": false,
    "has_next": true,
    "has_previous": false
  }
}

Authentication

JWT Bearer Token ์‚ฌ์šฉ

Authorization: Bearer {access_token}

API Endpoints

Swagger UI ํƒœ๊ทธ ์ˆœ์„œ ๊ธฐ์ค€ (dev-api.finders.it.kr) ์ „์ฒด 91๊ฐœ ์—”๋“œํฌ์ธํŠธ


1. ์ธ์ฆ(Auth) โ€” ์ธ์ฆ ๋ฐ ํ† ํฐ ๊ด€๋ จ API

# Method Path Summary Auth
1 POST /auth/social/login ์†Œ์…œ ๋กœ๊ทธ์ธ(๋ชจ๋ฐ”์ผ Native SDK) None
2 POST /auth/social/login/code ์†Œ์…œ ๋กœ๊ทธ์ธ (์›น ๋ธŒ๋ผ์šฐ์ €) None
3 POST /auth/reissue ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ None
4 POST /auth/owner/signup ์‚ฌ์žฅ๋‹˜ ํšŒ์›๊ฐ€์ž… None
5 POST /auth/owner/login ์‚ฌ์žฅ๋‹˜ ๋กœ๊ทธ์ธ None
6 POST /auth/logout ๋กœ๊ทธ์•„์›ƒ USER/OWNER

2. ํšŒ์›(Member) โ€” ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ, ํœด๋Œ€ํฐ ๋ณธ์ธ ์ธ์ฆ ๋ฐ ์‚ฌ์šฉ์ž ๊ด€๋ จ API

# Method Path Summary Auth
7 GET /members/me ๋งˆ์ดํŽ˜์ด์ง€(๋‚ด ์ •๋ณด) ์กฐํšŒ USER/OWNER/ADMIN
8 PATCH /members/me ๋‚ด ์ •๋ณด ์ˆ˜์ • USER/OWNER/ADMIN
9 POST /members/social/signup/complete ์†Œ์…œ ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ USER
10 POST /members/phone/verify/request ํœด๋Œ€ํฐ ์ธ์ฆ๋ฒˆํ˜ธ ์š”์ฒญ None
11 POST /members/phone/verify/confirm ํœด๋Œ€ํฐ ์ธ์ฆ๋ฒˆํ˜ธ ํ™•์ธ None
12 GET /users/nickname/check ๋‹‰๋„ค์ž„ ์ค‘๋ณต ํ™•์ธ None
13 DELETE /users/me ์‚ฌ์šฉ์ž(User) ํšŒ์› ํƒˆํ‡ด USER

3. ํšŒ์› ์ฃผ์†Œ(User Address) โ€” ์œ ์ € ๋ฐฐ์†ก์ง€ ๊ด€๋ฆฌ API

# Method Path Summary Auth
14 GET /users/addresses ๋ฐฐ์†ก์ง€ ๋ชฉ๋ก ์กฐํšŒ USER
15 POST /users/addresses ๋ฐฐ์†ก์ง€ ์ถ”๊ฐ€ USER

4. PhotoLab_USER โ€” ํ˜„์ƒ์†Œ API

# Method Path Summary Auth
16 GET /photo-labs ํ˜„์ƒ์†Œ ๋ชฉ๋ก ์กฐํšŒ API None
17 GET /photo-labs/{photoLabId} ํ˜„์ƒ์†Œ ์ƒ์„ธ ์กฐํšŒ API None
18 GET /photo-labs/popular ์ธ๊ธฐ ํ˜„์ƒ์†Œ ์กฐํšŒ API None
19 GET /photo-labs/regions ์ง€์—ญ๋ณ„ ํ˜„์ƒ์†Œ ๊ฐœ์ˆ˜ ์กฐํšŒ API None
20 GET /photo-labs/notices ํ˜„์ƒ์†Œ ๊ณต์ง€ ์กฐํšŒ API None
21 GET /photo-labs/favorites ๊ด€์‹ฌ ํ˜„์ƒ์†Œ ๋ชฉ๋ก ์กฐํšŒ(๋ฌดํ•œ ์Šคํฌ๋กค) USER
22 GET /photo-labs/search ์ปค๋ฎค๋‹ˆํ‹ฐ์šฉ ํ˜„์ƒ์†Œ ๊ฒ€์ƒ‰ None
23 GET /photo-labs/search/autocomplete ํ˜„์ƒ์†Œ ๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ API None
24 GET /photo-labs/search/preview ํ˜„์ƒ์†Œ ๋ชฉ๋ก ์กฐํšŒ preview API None
25 POST /photo-labs/{photoLabId}/favorites ํ˜„์ƒ์†Œ ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ”๊ฐ€ API USER
26 DELETE /photo-labs/{photoLabId}/favorites ํ˜„์ƒ์†Œ ์ฆ๊ฒจ์ฐพ๊ธฐ ์‚ญ์ œ API USER

5. PhotoLab Reservation โ€” ํ˜„์ƒ์†Œ ์˜ˆ์•ฝ API

# Method Path Summary Auth
27 POST /photo-labs/{photoLabId}/reservations ํ˜„์ƒ์†Œ ์˜ˆ์•ฝ ๋“ฑ๋ก USER
28 GET /photo-labs/{photoLabId}/reservations/available-times ํ˜„์ƒ์†Œ ๋‚ ์งœ๋ณ„ ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋Œ€ ์กฐํšŒ None
29 GET /photo-labs/{photoLabId}/reservations/{reservationId} ํ˜„์ƒ์†Œ ์˜ˆ์•ฝ๋‚ด์—ญ ์™„๋ฃŒ ์กฐํšŒ USER
30 DELETE /photo-labs/{photoLabId}/reservations/{reservationId} ํ˜„์ƒ์†Œ ์˜ˆ์•ฝ ์ทจ์†Œ USER

6. Photo โ€” ํšŒ์›์šฉ ํ˜„์ƒ/์Šค์บ”/์ธํ™” ๋‚ด์—ญ ์กฐํšŒ API

# Method Path Summary Auth
31 GET /photos/me/work-in-progress ํšŒ์› - ๋‚ด ์ง„ํ–‰์ค‘ ์ž‘์—… ์กฐํšŒ USER
32 GET /photos/development-orders ํšŒ์› - ๋‚ด ํ˜„์ƒ ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ(๋ฌดํ•œ์Šคํฌ๋กค) USER
33 GET /photos/development-orders/{developmentOrderId}/scan-results ํšŒ์› - ์Šค์บ” ๊ฒฐ๊ณผ ์‚ฌ์ง„ ๋ชฉ๋ก ์กฐํšŒ USER
34 GET /photos/development-orders/{developmentOrderId}/photo-labs/account ํšŒ์› - ํ˜„์ƒ ์ฃผ๋ฌธํ•œ ํ˜„์ƒ์†Œ ์‚ฌ์—…์ž ๊ณ„์ขŒ ์กฐํšŒ USER
35 POST /photos/development-orders/{developmentOrderId}/receipt ํšŒ์› - ์Šค์บ”/ํ˜„์ƒ ๊ฒฐ๊ณผ ์ˆ˜๋ น ํ™•์ • USER
36 POST /photos/development-orders/{developmentOrderId}/print/skip ํšŒ์› - ์ธํ™” ์•ˆํ•จ ํ™•์ • USER
37 GET /photos/print-orders/options ํšŒ์› - ์ธํ™” ์˜ต์…˜ ๋ชฉ๋ก ์กฐํšŒ None
38 POST /photos/print-orders/quote ํšŒ์› - ์ธํ™” ์˜ต์…˜์— ๋”ฐ๋ฅธ ๊ฐ€๊ฒฉ ์กฐํšŒ USER
39 POST /photos/print-orders ํšŒ์› - ์ธํ™” ์ฃผ๋ฌธ ์ƒ์„ฑ USER
40 POST /photos/print-orders/{printOrderId}/deposit-receipt ํšŒ์› - ์ž…๊ธˆ ์บก์ฒ˜ ๋“ฑ๋ก ํ™•์ • USER

7. Photo Restoration โ€” AI ์‚ฌ์ง„ ๋ณต์› API

# Method Path Summary Auth
41 GET /restorations ๋ณต์› ์ด๋ ฅ ์กฐํšŒ USER
42 POST /restorations ์‚ฌ์ง„ ๋ณต์› ์š”์ฒญ USER
43 GET /restorations/{restorationId} ๋ณต์› ๊ฒฐ๊ณผ ์กฐํšŒ USER
44 POST /restorations/{restorationId}/feedback ๋ณต์› ๊ฒฐ๊ณผ ํ”ผ๋“œ๋ฐฑ USER
45 POST /restorations/{restorationId}/share ๋ณต์› ์ด๋ฏธ์ง€ ๊ณต์œ  USER

8. Community โ€” ์‚ฌ์ง„ ์ˆ˜๋‹ค ๊ด€๋ จ API

# Method Path Summary Auth
46 GET /posts ํ”ผ๋“œ ๋ชฉ๋ก ์กฐํšŒ None
47 POST /posts ๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ USER
48 GET /posts/{postId} ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ ์กฐํšŒ None
49 DELETE /posts/{postId} ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ USER
50 GET /posts/preview ์ปค๋ฎค๋‹ˆํ‹ฐ ์‚ฌ์ง„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ None
51 GET /posts/me ๋‚ด๊ฐ€ ์“ด ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ USER
52 GET /posts/likes ๊ด€์‹ฌ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ USER
53 GET /posts/search ์‚ฌ์ง„ ์ˆ˜๋‹ค ๊ฒŒ์‹œ๊ธ€ ๊ฒ€์ƒ‰ None
54 GET /posts/search/autocomplete ๊ฒ€์ƒ‰์–ด ์ž๋™์™„์„ฑ None
55 GET /posts/search/history ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๋ชฉ๋ก ์กฐํšŒ USER
56 DELETE /posts/search/history/{searchHistoryId} ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ๊ฐœ๋ณ„ ์‚ญ์ œ USER
57 DELETE /posts/search/history/all ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ์ „์ฒด ์‚ญ์ œ USER
58 POST /posts/{postId}/likes ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” USER
59 DELETE /posts/{postId}/likes ๊ฒŒ์‹œ๋ฌผ ์ข‹์•„์š” ์ทจ์†Œ USER
60 GET /posts/{postId}/comments ๊ฒŒ์‹œ๋ฌผ ๋Œ“๊ธ€ ์กฐํšŒ None
61 POST /posts/{postId}/comments ๊ฒŒ์‹œ๋ฌผ ๋Œ“๊ธ€ ์ž‘์„ฑ USER
62 DELETE /posts/comments/{commentId} ๊ฒŒ์‹œ๋ฌผ ๋Œ“๊ธ€ ์‚ญ์ œ USER

9. Inquiry โ€” 1:1 ๋ฌธ์˜ API (User)

# Method Path Summary Auth
63 GET /inquiries ๋‚ด ๋ฌธ์˜ ๋ชฉ๋ก ์กฐํšŒ USER
64 POST /inquiries ๋ฌธ์˜ ์ƒ์„ฑ USER
65 GET /inquiries/{inquiryId} ๋ฌธ์˜ ์ƒ์„ธ ์กฐํšŒ USER

10. Owner Inquiry โ€” 1:1 ๋ฌธ์˜ API (Owner)

# Method Path Summary Auth
66 GET /owner/inquiries ํ˜„์ƒ์†Œ ๋ฌธ์˜ ๋ชฉ๋ก ์กฐํšŒ OWNER
67 GET /owner/inquiries/{inquiryId} ํ˜„์ƒ์†Œ ๋ฌธ์˜ ์ƒ์„ธ ์กฐํšŒ OWNER
68 POST /owner/inquiries/{inquiryId}/replies ๋ฌธ์˜ ๋‹ต๋ณ€ ์ž‘์„ฑ OWNER

11. Admin Inquiry โ€” 1:1 ๋ฌธ์˜ API (Admin)

# Method Path Summary Auth
69 GET /admin/inquiries ์„œ๋น„์Šค ๋ฌธ์˜ ๋ชฉ๋ก ์กฐํšŒ ADMIN
70 GET /admin/inquiries/{inquiryId} ์„œ๋น„์Šค ๋ฌธ์˜ ์ƒ์„ธ ์กฐํšŒ ADMIN
71 POST /admin/inquiries/{inquiryId}/replies ๋ฌธ์˜ ๋‹ต๋ณ€ ์ž‘์„ฑ ADMIN

12. PhotoLab_OWNER โ€” owner์šฉ ํ˜„์ƒ์†Œ API

# Method Path Summary Auth
72 POST /owner/photo-labs ํ˜„์ƒ์†Œ ๊ธฐ๋ณธ์‚ฌํ•ญ ๋“ฑ๋ก API OWNER
73 POST /owner/photo-labs/images/presigned-url ํ˜„์ƒ์†Œ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ presigned url ๋ฐœ๊ธ‰ OWNER
74 POST /owner/photo-labs/images ํ˜„์ƒ์†Œ ์ด๋ฏธ์ง€ ๋“ฑ๋ก OWNER
75 POST /owner/photo-labs/documents/presigned-url ํ˜„์ƒ์†Œ ์‚ฌ์—…์ž ๋“ฑ๋ก ์„œ๋ฅ˜ ์—…๋กœ๋“œ presigned url ๋ฐœ๊ธ‰ API OWNER
76 POST /owner/photo-labs/documents ํ˜„์ƒ์†Œ ์‚ฌ์—…์ž ์„œ๋ฅ˜ ๋“ฑ๋ก OWNER

13. Owner Photo โ€” ์˜ค๋„ˆ์šฉ ํ˜„์ƒ/์Šค์บ”/์ธํ™” API

# Method Path Summary Auth
77 POST /owner/photo-labs/{photoLabId}/development-orders ์˜ค๋„ˆ - ํ˜„์ƒ ์ฃผ๋ฌธ ์ƒ์„ฑ OWNER
78 PATCH /owner/photo-labs/{photoLabId}/development-orders/{developmentOrderId}/status ์˜ค๋„ˆ - ํ˜„์ƒ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ OWNER
79 POST /owner/photo-labs/{photoLabId}/scan-photos/presigned-urls ์˜ค๋„ˆ - ์Šค์บ” ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œ ํ•  presigned url ๋ฒŒํฌ ๋ฐœ๊ธ‰(PUT) OWNER
80 POST /owner/photo-labs/{photoLabId}/development-orders/{developmentOrderId}/scanned-photos ์˜ค๋„ˆ - (์ฃผ๋ฌธ ๊ธฐ์ค€) ์Šค์บ” ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ DB ๋“ฑ๋ก OWNER
81 PATCH /owner/photo-labs/{photoLabId}/print-orders/{printOrderId}/printing ์˜ค๋„ˆ - ์ธํ™” ์ฃผ๋ฌธ์˜ ์˜ˆ์ƒ ์™„๋ฃŒ ์‹œ๊ฐ„ ๋“ฑ๋ก OWNER
82 PATCH /owner/photo-labs/{photoLabId}/print-orders/{printOrderId}/shipping ์˜ค๋„ˆ - ๋ฐฐ์†ก ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฐ ์ •๋ณด ๋“ฑ๋ก OWNER
83 PATCH /owner/photo-labs/{photoLabId}/print-orders/{printOrderId}/status ์˜ค๋„ˆ - ํ˜„์ƒ ์ฃผ๋ฌธ ์™„๋ฃŒ OWNER

14. File โ€” ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๊ด€๋ฆฌ API

# Method Path Summary Auth
84 POST /files/presigned-url ์—…๋กœ๋“œ์šฉ Presigned URL ๋ฐœ๊ธ‰ USER/OWNER
85 GET /files/signed-url Private ํŒŒ์ผ ์กฐํšŒ URL ๋ฐœ๊ธ‰ USER/OWNER

15. ๊ฐœ๋ฐœ์šฉ ๋„๊ตฌ โ€” ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ API

# Method Path Summary Auth
86 GET /dev/login ์„œ๋ฒ„์šฉ ํ† ํฐ ๋ฐœ๊ธ‰ None

Payment โ€” ๊ฒฐ์ œ API @Hidden

Swagger UI์—์„œ ์ˆจ๊น€ ์ฒ˜๋ฆฌ๋จ (@Hidden). ์ถ”ํ›„ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ์™„์„ฑ ์‹œ ๋…ธ์ถœ ์˜ˆ์ •.

# Method Path Summary Auth
87 GET /payments ๋‚ด ๊ฒฐ์ œ ๋ชฉ๋ก ์กฐํšŒ USER
88 POST /payments/pre-register ๊ฒฐ์ œ ์‚ฌ์ „๋“ฑ๋ก USER
89 POST /payments/complete ๊ฒฐ์ œ ์™„๋ฃŒ ์ฒ˜๋ฆฌ USER
90 GET /payments/{paymentId} ๊ฒฐ์ œ ์ƒ์„ธ ์กฐํšŒ USER
91 POST /payments/{paymentId}/cancel ๊ฒฐ์ œ ์ทจ์†Œ USER

Dev Server Test Results

ํ…Œ์ŠคํŠธ ์ผ์ž: 2026-02-11

์ „์ฒด ์—”๋“œํฌ์ธํŠธ: 91๊ฐœ

๊ฒฐ๊ณผ ์š”์•ฝ:

  • โœ… Passed: 52๊ฐœ (200/201 ์ •์ƒ ์‘๋‹ต ํ™•์ธ)
  • โš ๏ธ Expected Error: 27๊ฐœ (๊ฒ€์ฆ/๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์—๋Ÿฌ โ€” ์—”๋“œํฌ์ธํŠธ ์ •์ƒ ์ž‘๋™, ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ/ํŒŒ๋ผ๋ฏธํ„ฐ ๋ถ€์กฑ)
  • โŒ Server Error: 2๊ฐœ (์˜ˆ์ƒ์น˜ ๋ชปํ•œ 500 ์—๋Ÿฌ โ€” ์กฐ์‚ฌ ํ•„์š”)
    • POST /auth/logout โ€” COMMON_500 (refreshToken ์ฟ ํ‚ค ๋ฏธ์ „๋‹ฌ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ)
    • POST /auth/reissue โ€” COMMON_500 (refreshToken ์ฟ ํ‚ค ๋ฏธ์ „๋‹ฌ๋กœ ์ธํ•œ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ)
  • ๐Ÿ”˜ Not Testable: 10๊ฐœ (์‹ค์ œ OAuth/SMS/ํŒŒ์ผ ์—…๋กœ๋“œ/๊ฒฐ์ œ/์ธํ™” ์ฃผ๋ฌธ ๋“ฑ ํ•„์š”)

์ฃผ์š” ์ˆ˜์ • ์ด๋ ฅ:

  • PR #442: GET /restorations Sort ํŒŒ์‹ฑ ๋ฒ„๊ทธ ์ˆ˜์ • (PageRequest.of() ๋ฐฉ์‹)
  • PR #442: POST /restorations SUPIR s_stage1 ํƒ€์ž… ๋ฒ„๊ทธ ์ˆ˜์ • (Double โ†’ Integer)
  • PR #443: Sort ํŒŒ๋ผ๋ฏธํ„ฐ @RequestParam ๋ฐฉ์‹ ์ „ํ™˜ + ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ˜์˜
  • PR #445: CD Docker pull ๋ˆ„๋ฝ ์ˆ˜์ • (--profile blue --profile green)
  • PR #448: Webhook SUPIR output ํŒŒ์‹ฑ ์ˆ˜์ • (List<String> โ†’ Object + instanceof ๋ถ„๊ธฐ)

Error Codes

Common (COMMON_xxx)

Code Status Message
COMMON_400 400 ์ž˜๋ชป๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.
COMMON_401 401 ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
COMMON_403 403 ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
COMMON_404 404 ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
COMMON_405 405 ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ HTTP ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
COMMON_409 409 ๋ฆฌ์†Œ์Šค ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
COMMON_500 500 ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Validation (VALID_xxx)

Code Status Message
VALID_400 400 ์ž…๋ ฅ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
VALID_401 400 ํ•„์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
VALID_402 400 ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Auth (AUTH_xxx)

Code Status Message
AUTH_401 401 ์ธ์ฆ ํ† ํฐ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AUTH_402 401 ์œ ํšจํ•˜์ง€ ์•Š์€ ํ† ํฐ์ž…๋‹ˆ๋‹ค.
AUTH_403 401 ๋งŒ๋ฃŒ๋œ ํ† ํฐ์ž…๋‹ˆ๋‹ค.
AUTH_410 400 ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์†Œ์…œ ๋กœ๊ทธ์ธ ์ œ๊ณต์ž์ž…๋‹ˆ๋‹ค.
AUTH_411 400 ์†Œ์…œ ๋กœ๊ทธ์ธ ์š”์ฒญ ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AUTH_430 403 ํ•ด๋‹น ์„œ๋น„์Šค์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†๋Š” ๊ณ„์ • ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
AUTH_400 400 ์†Œ์…œ ๋กœ๊ทธ์ธ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
AUTH_404 400 ์†Œ์…œ ํ† ํฐ ๋ฐœ๊ธ‰์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
AUTH_405 400 ์†Œ์…œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
AUTH_406 401 ๊ฐ€์ž…๋˜์ง€ ์•Š์€ ์†Œ์…œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.
AUTH_409 409 ๋‹ค๋ฅธ ์†Œ์…œ ๊ณ„์ •์œผ๋กœ ๊ฐ€์ž…๋œ ํšŒ์›์ž…๋‹ˆ๋‹ค.
AUTH_412 403 ์ด์šฉ์ด ์ œํ•œ๋œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.
AUTH_413 403 ํ•„์ˆ˜ ์•ฝ๊ด€์— ๋™์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
AUTH_414 403 ์ถ”๊ฐ€ ์ •๋ณด ์ž…๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
AUTH_415 400 ์ธ์ฆ๋ฒˆํ˜ธ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.
AUTH_420 400 ์ธ์ฆ๋ฒˆํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AUTH_421 400 ์ธ์ฆ๋ฒˆํ˜ธ๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
AUTH_422 429 ์ธ์ฆ ์‹œ๋„ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
AUTH_423 409 ์ด๋ฏธ ์ธ์ฆ์ด ์™„๋ฃŒ๋œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.
AUTH_503 503 ํ˜„์žฌ ์ธ์ฆ ์„œ๋น„์Šค ์ด์šฉ์ด ์›ํ™œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.

์ฐธ๊ณ : AUTH_401์€ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค: ์ธ์ฆ ํ† ํฐ ๋ฏธ์กด์žฌ ๋˜๋Š” ์ด๋ฉ”์ผ/๋น„๋ฐ€๋ฒˆํ˜ธ ๋ถˆ์ผ์น˜ (์‚ฌ์žฅ๋‹˜ ๋กœ๊ทธ์ธ).

Member (MEMBER_xxx)

Code Status Message
MEMBER_404 404 ํšŒ์›์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
MEMBER_409 409 ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํšŒ์›์ž…๋‹ˆ๋‹ค.
MEMBER_410 409 ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ๋‹‰๋„ค์ž„์ž…๋‹ˆ๋‹ค.
MEMBER_411 409 ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ธ ์ด๋ฉ”์ผ์ž…๋‹ˆ๋‹ค.
MEMBER_402 403 ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๊ฑฐ๋‚˜ ์ด๋ฏธ ํƒˆํ‡ดํ•œ ๊ณ„์ •์ž…๋‹ˆ๋‹ค.
MEMBER_420 400 ํœด๋Œ€ํฐ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
MEMBER_421 400 ํœด๋Œ€ํฐ ์ธ์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
MEMBER_430 403 ํ•„์ˆ˜ ์•ฝ๊ด€์— ๋™์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
MEMBER_440 403 ๋ฐฉ๋ฌธ ์˜ˆ์ •์ธ ์˜ˆ์•ฝ ๋‚ด์—ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ์ทจ์†Œ ํ›„ ํƒˆํ‡ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
MEMBER_441 403 ์ง„ํ–‰ ์ค‘์ธ ํ˜„์ƒ/์ธํ™” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฃŒ ํ›„ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.
MEMBER_442 403 ๋‹ต๋ณ€ ๋Œ€๊ธฐ ์ค‘์ธ ๋ฌธ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ต๋ณ€ ํ™•์ธ ํ›„ ํƒˆํ‡ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Store (STORE_xxx)

Code Status Message
STORE_404 404 ํ˜„์ƒ์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
STORE_403 403 ํ•ด๋‹น ํ˜„์ƒ์†Œ์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
REGION_404 404 ์ง€์—ญ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
BUSINESS_HOUR_404 404 ํ˜„์ƒ์†Œ์˜ ์˜์—…์‹œ๊ฐ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Reservation (RESERVATION_xxx)

Code Status Message
RESERVATION_404 404 ์˜ˆ์•ฝ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
RESERVATION_409 409 ํ•ด๋‹น ์‹œ๊ฐ„์— ์ด๋ฏธ ์˜ˆ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
RESERVATION_400 400 ์˜ˆ์•ฝ์„ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
RESERVATION_409_FULL 409 ํ•ด๋‹น ์‹œ๊ฐ„๋Œ€์˜ ์˜ˆ์•ฝ์ด ๋ชจ๋‘ ๋งˆ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
RESERVATION_SLOT_404 404 ์˜ˆ์•ฝ ์Šฌ๋กฏ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Photo (PHOTO_xxx)

Code Status Message
PHOTO_404 404 ์‚ฌ์ง„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_500 500 ์‚ฌ์ง„ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
PHOTO_501 500 ์‚ฌ์ง„ ๋ณต๊ตฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
PHOTO_400_FILES_REQUIRED 400 ์Šค์บ” ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
PHOTO_403_OWNER_MISMATCH 403 ํ•ด๋‹น ํ˜„์ƒ์†Œ์˜ ์˜ค๋„ˆ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
PHOTO_400_RESERVATION_MISMATCH 400 ํ•ด๋‹น ํ˜„์ƒ์†Œ์˜ ์˜ˆ์•ฝ์ด ์•„๋‹™๋‹ˆ๋‹ค.
PHOTO_409_ORDER_EXISTS 409 ์ด๋ฏธ ํ•ด๋‹น ์˜ˆ์•ฝ์œผ๋กœ ํ˜„์ƒ ์ฃผ๋ฌธ์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
PHOTO_400_MEMBER_REQUIRED 400 ํ˜„์žฅ ์ ‘์ˆ˜ ์‹œ ํšŒ์› ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
PHOTO_404_ORDER_NOT_FOUND 404 ํ˜„์ƒ ์ฃผ๋ฌธ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_400_ORDER_PHOTOLAB_MISMATCH 400 ํ•ด๋‹น ํ˜„์ƒ์†Œ์˜ ์ฃผ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค.
PHOTO_400_PHOTOLAB_ACCOUNT_NOT_REGISTERED 400 ํ˜„์ƒ์†Œ์˜ ์‚ฌ์—…์ž ๊ณ„์ขŒ ์ •๋ณด๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
PHOTO_403_PHOTOLAB_ACCOUNT_ACCESS_DENIED 403 ํ•ด๋‹น ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ํ˜„์ƒ์†Œ ๊ณ„์ขŒ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_404_PRINT_ORDER_NOT_FOUND 404 ํ•ด๋‹น ์ธํ™” ์ฃผ๋ฌธ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_400_PRINT_ORDER_STATUS_INVALID 400 ํ˜„์žฌ ์ธํ™” ์ฃผ๋ฌธ ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_403_PRINT_ORDER_OWNER_MISMATCH 403 ํ•ด๋‹น ์ธํ™” ์ฃผ๋ฌธ์„ ์ฒ˜๋ฆฌํ•  ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_409_PAYMENT_ALREADY_SUBMITTED 409 ์ด๋ฏธ ์ž…๊ธˆ ์ฆ๋น™์ด ์ œ์ถœ๋œ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค.
PHOTO_409_DELIVERY_ALREADY_CREATED 409 ์ด๋ฏธ ๋ฐฐ์†ก ์ •๋ณด๊ฐ€ ๋“ฑ๋ก๋œ ์ฃผ๋ฌธ์ž…๋‹ˆ๋‹ค.
PHOTO_404_DELIVERY_NOT_FOUND 404 ๋ฐฐ์†ก ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_400_DELIVERY_STATUS_INVALID 400 ํ˜„์žฌ ๋ฐฐ์†ก ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PHOTO_400_PRINT_ORDER_INVALID 400 ํ˜„์žฌ ์ธํ™” ์ฃผ๋ฌธ ์ƒํƒœ์—์„œ๋Š” ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Credit (CREDIT_xxx)

Code Status Message
CREDIT_402 402 ํฌ๋ ˆ๋”ง์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.
CREDIT_404 404 ํฌ๋ ˆ๋”ง ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Payment (PAYMENT_xxx)

Code Status Message
PAYMENT_404 404 ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PAYMENT_409 409 ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฐ์ œ ID์ž…๋‹ˆ๋‹ค.
PAYMENT_403 403 ํ•ด๋‹น ๊ฒฐ์ œ์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
PAYMENT_410 409 ์ด๋ฏธ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ์ œ์ž…๋‹ˆ๋‹ค.
PAYMENT_400 400 ๊ฒฐ์ œ ๊ธˆ์•ก์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
PAYMENT_401 400 ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฐ์ œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
PAYMENT_402 400 ์ทจ์†Œํ•  ์ˆ˜ ์—†๋Š” ๊ฒฐ์ œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
PAYMENT_500 500 ๊ฒฐ์ œ ์ทจ์†Œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
PAYMENT_412 400 ์ทจ์†Œ ๊ธˆ์•ก์ด ๊ฒฐ์ œ ๊ธˆ์•ก์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PAYMENT_411 400 ์›นํ›… ๊ฒ€์ฆ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

External API (EXTERNAL_xxx)

Code Status Message
EXTERNAL_503 503 ์™ธ๋ถ€ API ํ˜ธ์ถœ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
KAKAO_502 502 ์นด์นด์˜ค ์•ฝ๊ด€ ๋™์˜ ๋‚ด์—ญ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
KAKAO_500 400 ์นด์นด์˜ค ์—ฐ๊ฒฐ ๋Š๊ธฐ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
KAKAO_401 401 ์นด์นด์˜ค ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋งŒ๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
KAKAO_502 502 ์นด์นด์˜ค ์„œ๋ฒ„ ์˜ค๋ฅ˜๋กœ ์•ฝ๊ด€ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

Storage (STORAGE_xxx)

Code Status Message
STORAGE_500 500 ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
STORAGE_501 500 ํŒŒ์ผ ์‚ญ์ œ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
STORAGE_404 404 ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
STORAGE_400 400 ์ž˜๋ชป๋œ ์ €์žฅ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
STORAGE_401 400 ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ํŒŒ์ผ ํ˜•์‹์ž…๋‹ˆ๋‹ค.
STORAGE_402 400 ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.
STORAGE_502 500 Signed URL ์ƒ์„ฑ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.
STORAGE_403 400 ํ•ด๋‹น API์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์—…๋กœ๋“œ ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค.
STORAGE_405 403 ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์—…๋กœ๋“œ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

Inquiry (INQUIRY_xxx)

Code Status Message
INQUIRY_404 404 ๋ฌธ์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
INQUIRY_403 403 ํ•ด๋‹น ๋ฌธ์˜์— ์ ‘๊ทผ ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
INQUIRY_400 400 ์ด๋ฏธ ์ข…๋ฃŒ๋œ ๋ฌธ์˜์ž…๋‹ˆ๋‹ค.

Community (COMMUNITY_xxx)

Code Status Message
COMMUNITY_401 400 ๋ฆฌ๋ทฐ๋Š” ์ตœ์†Œ 20์ž ์ด์ƒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
COMMUNITY_402 400 ๋ฆฌ๋ทฐ๋Š” ์ตœ๋Œ€ 300์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.