๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Today I Learned

API ์„ค๊ณ„ ์›์น™

 

Today I Learn โœ๐Ÿผ 

 

  • ์˜ค๋Š˜ ํ•˜๋ฃจ ๊ฐ€์žฅ ์ธ์ƒ ๊นŠ์—ˆ๋˜ ๋ฐฐ์›€์—๋Š” ๋ญ๊ฐ€ ์žˆ์—ˆ์ง€?
    • endpoint๋ฅผ ์ •ํ•˜๋Š”๋ฐ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค
    • patch ์–ธ์ œ ์“ฐ๋Š”๊ฑฐ์ง€?
    • ๋‹จ์ผ์ฑ…์ž„์›์น™์€ class ๋ฒ”์œ„ ์•„๋‹ˆ์•ผ?

 

  • ๊ทธ ๋ฐฐ์›€๊นŒ์ง€ ๋‹ค๊ฐ€๊ฐ€๋Š”๋ฐ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์—ˆ์ง€?
    • ํšŒ์‚ฌ ํŒ€์— ๋”ฐ๋ผ ๋‹ฌ๋ฆฌ์ง€๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€? ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ”์—ˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ํŒ€์›์ด ์™œ ๊ฐ™์€ endpoint๋กœ patch๋ฅผ ํ•ด๋„ ๋˜๋Š”๋ฐ ์ด์œ ๋ฅผ ๋ฌผ์–ด์„œ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

  • ๊ทธ ์–ด๋ ค์›€์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ์‹œ๋„๋“ค์€ ๋ฌด์—‡์ด ์žˆ์—ˆ์ง€?
    • ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์งˆ์˜
    • gpt ์‚ฌ์šฉ
    • ๋ฉ˜ํ† ๊ฐ€ ์™€์„œ ๋ฆฌ๋ทฐ

 

  • ๊ทธ ๊ณผ์ •์—์„œ ๋‚˜๋Š” ๋ฌด์—‡์„ ๊นจ๋‹ฌ์•˜๊ณ , ์–ด๋–ค ๊ฐ์ •/์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ์ง€?
    • ๋ฐฐ๋‹ฌ์•ฑ์—์„œ๋Š” ์Œ์‹์„ ๋ฏธ๋ฆฌ ์ˆ˜๋Ÿ‰์„ ์ˆ˜์ •ํ•  ์ผ์ด ์—†๋‹ค
    • ๋ช…์„ธ์„œ๋ฅผ ๋” ์ž˜ ๋ด์•ผํ•œ๋‹ค

 

  • ์ด ์ƒํƒœ์—์„œ ์ดํ›„ ๋” ๋‚˜์€ ๋‚ด๊ฐ€ ๋˜๋ ค๋ฉด ๋ฌด์—‡์„ ๋ณด์™„ํ•˜์ง€?
    • ๋ช…์„ธ์„œ ๋Œ€๋กœ ํ•ด์•ผ ํ•จ
    • ํ™•์‹คํžˆ ํ•ด๋ด์•ผ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 


 

 

API ์„ค๊ณ„์—๋„ ์—ฌ๋Ÿฌ ์›์น™์ด ์žˆ๋‹ค.

API์˜ ํšจ์œจ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์‚ฌ์šฉ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” RESTful API ๋””์ž์ธ ์›์น™, API ์„ค๊ณ„์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์›์น™ ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” API ์„ค๊ณ„ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์ฃผ์š” ์›์น™๋“ค์ž…๋‹ˆ๋‹ค.

1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single Responsibility Principle)

  • ์„ค๋ช…: ๊ฐ ์—”๋“œํฌ์ธํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API์˜ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•ด์ง€๊ณ , ์ดํ•ด์™€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ์Œ์‹ ์กฐํšŒ, ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์—”๋“œํฌ์ธํŠธ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

2. ์ผ๊ด€์„ฑ ์žˆ๋Š” ์„ค๊ณ„ (Consistency)

  • ์„ค๋ช…: API์˜ ๊ฒฝ๋กœ, ๋ฉ”์„œ๋“œ, ํŒŒ๋ผ๋ฏธํ„ฐ, ์‘๋‹ต ํ˜•์‹์ด ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด API ์‚ฌ์šฉ์ž๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋Š” /resource ํ˜•ํƒœ๋ฅผ ๋”ฐ๋ฅด๊ณ , GET, POST, PUT, DELETE์™€ ๊ฐ™์€ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. ์ž์› ์ง€ํ–ฅ (Resource-Oriented)

  • ์„ค๋ช…: API๋Š” ์ž์›(resource)์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ž์›์˜ ์ƒํƒœ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: /api/v1/users์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

4. RESTful ์›์น™ (RESTful Principles)

  • ์„ค๋ช…: RESTful API๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์„ ์กฐ์ž‘ํ•˜๋ฉฐ, ์ž์›์˜ URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. RESTful ์›์น™์„ ๋”ฐ๋ฅด๋ฉด API๋Š” HTTP์˜ ํ‘œ์ค€์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • GET /api/v1/users - ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ
    • POST /api/v1/users - ์‚ฌ์šฉ์ž ์ƒ์„ฑ
    • GET /api/v1/users/{userId} - ํŠน์ • ์‚ฌ์šฉ์ž ์กฐํšŒ
    • PUT /api/v1/users/{userId} - ํŠน์ • ์‚ฌ์šฉ์ž ์ˆ˜์ •
    • DELETE /api/v1/users/{userId} - ํŠน์ • ์‚ฌ์šฉ์ž ์‚ญ์ œ

5. ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค (Statelessness)

  • ์„ค๋ช…: ๊ฐ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ์„œ๋ฒ„๋Š” ์š”์ฒญ ๊ฐ„์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์š”์ฒญ์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์ƒํƒœ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๊ณ , ์„œ๋ฒ„๋Š” ๊ฐ ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

6. ๋ช…ํ™•ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ (Clear Error Handling)

  • ์„ค๋ช…: ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ช…ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • 404 Not Found - ์š”์ฒญํ•œ ์ž์›์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • 400 Bad Request - ์ž˜๋ชป๋œ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ
    • 500 Internal Server Error - ์„œ๋ฒ„ ์ธก ์˜ค๋ฅ˜

7. ๋ฒ„์ „ ๊ด€๋ฆฌ (Versioning)

  • ์„ค๋ช…: API์˜ ๋ฒ„์ „์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์—ฌ, API ๋ณ€๊ฒฝ ์‹œ ๊ธฐ์กด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” API์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: /api/v1/resource, /api/v2/resource์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

8. ๋ฌธ์„œํ™” (Documentation)

  • ์„ค๋ช…: API์˜ ์‚ฌ์šฉ๋ฒ•, ์—”๋“œํฌ์ธํŠธ, ํŒŒ๋ผ๋ฏธํ„ฐ, ์‘๋‹ต ํ˜•์‹ ๋“ฑ์„ ์ž์„ธํžˆ ๋ฌธ์„œํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์ด API๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: Swagger/OpenAPI ๋ฌธ์„œํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

9. ๋ณด์•ˆ (Security)

  • ์„ค๋ช…: API๋Š” ๋ณด์•ˆ์„ ๊ณ ๋ คํ•˜์—ฌ ์ธ์ฆ(Authentication)๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ(Authorization)๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ ์ ˆํ•œ ๊ถŒํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , HTTPS๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.

10. ์„ฑ๋Šฅ ์ตœ์ ํ™” (Performance Optimization)

  • ์„ค๋ช…: API์˜ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์—ฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์ ์ ˆํ•œ ์บ์‹ฑ ์ „๋žต์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ฑฐ๋‚˜, ETag์™€ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์›์น™๋“ค์„ ๋”ฐ๋ฅด๋ฉด API๋Š” ๋” ๊ฒฌ๊ณ ํ•˜๊ณ , ์ผ๊ด€๋˜๋ฉฐ, ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. API ์„ค๊ณ„๋Š” ์ž˜ ์ •์˜๋œ ์›์น™๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด API์˜ ํšจ์œจ์„ฑ๊ณผ ํ’ˆ์งˆ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

Patch๋Š” ์–ธ์ œ ์“ฐ๋Š”๊ฑฐ์ง€?

์–ธ์ œ PATCH๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

  1. ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ: ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•  ๋•Œ PATCH๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์—์„œ ์ด๋ฉ”์ผ ์ฃผ์†Œ๋‚˜ ์ „ํ™”๋ฒˆํ˜ธ๋งŒ ๋ณ€๊ฒฝํ•  ๋•Œ PATCH๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ฆฌ์†Œ์Šค์˜ ํŠน์ • ํ•„๋“œ๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ: ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ๋ฌธ ์ƒํƒœ๋ฅผ "๋ฐฐ๋‹ฌ ์ค‘"์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ, ์ „์ฒด ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ PUT์œผ๋กœ ์ „์†กํ•˜๋Š” ๋Œ€์‹ , PATCH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ƒํƒœ ํ•„๋“œ๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ PATCH

๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)์€ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ์›์น™์ž…๋‹ˆ๋‹ค. ์—”๋“œํฌ์ธํŠธ๋„ ์ด ์›์น™์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์—ญํ• ์„ ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋Š” ์œ ์ง€๋ณด์ˆ˜๋‚˜ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ PATCH ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์˜คํžˆ๋ ค ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—”๋“œํฌ์ธํŠธ๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • PATCH /orders/{id}/status: ์ฃผ๋ฌธ ์ƒํƒœ๋งŒ ๋ณ€๊ฒฝ
  • PATCH /users/{id}/email: ์ด๋ฉ”์ผ ์ฃผ์†Œ๋งŒ ๋ณ€๊ฒฝ

์ด์ฒ˜๋Ÿผ PATCH๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํŠน์ • ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝ

  • PATCH๋Š” ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€๋งŒ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ๋งž์ถ”์–ด ํŠน์ • ํ•„๋“œ๋‚˜ ์†์„ฑ๋งŒ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋กœ PATCH๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํด๋ฆฐ ์ฝ”๋“œ ์ž‘์„ฑ์— ๋ถ€ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ๋ฆฌ์†Œ์Šค์˜ ์ „์ฒด๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๋ฉด PUT์„, ํŠน์ • ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด PATCH๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

 

PATCH /orders/{id}/status

๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ์ค€์ˆ˜

์ด ๊ฒฝ์šฐ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ฃผ๋ฌธ ์ƒํƒœ ๋ณ€๊ฒฝ์ด๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ช…ํ™•ํ•œ ์—ญํ• 

๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ์š”์ฒญ๊ณผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„

 

  1. ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋‹ด: ๊ฐ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํŠน์ • ์ž‘์—…๋งŒ์„ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
  2. ๋ณ€๊ฒฝ์˜ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋จ: PATCH /orders/{id}/status ์—”๋“œํฌ์ธํŠธ๋Š” ์˜ค์ง ์ฃผ๋ฌธ์˜ ์ƒํƒœ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™•์žฅ์„ฑ: ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ API๊ฐ€ ํ™•์žฅ๋˜๋”๋ผ๋„, ๊ฐ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋ช…ํ™•ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ํ•„๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ์ƒˆ๋กœ์šด ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค (PATCH /orders/{id}/delivery-date ๋“ฑ).

๋”ฐ๋ผ์„œ PATCH /orders/{id}/status์™€ ๊ฐ™์€ ์„ค๊ณ„๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ง€ํ‚ค๋ฉด์„œ, ๋™์‹œ์— PATCH ๋ฉ”์„œ๋“œ์˜ ์œ ์šฉ์„ฑ์„ ์ž˜ ์‚ด๋ฆฐ ์ข‹์€ ์ ‘๊ทผ์ž…๋‹ˆ๋‹ค.

 
 

 

 

 

 

 

 

 

'Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”„๋กœ์ ํŠธ ๋ฐœํ‘œ  (0) 2024.09.03
ํ”„๋กœ์ ํŠธ ์‹œ์ž‘  (0) 2024.08.23
Redis, Spring  (0) 2024.08.07
Spring Security? OAuth2 ?  (0) 2024.08.06
MSA, Spring Cloud  (0) 2024.08.06