์ด์ง€๋ฏผ์˜ ๊ฐœ๋ฐœ ๋…ธํŠธ

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋ฉฐ Java์™€ Spring์„ ์ค‘์‹ฌ์œผ๋กœ ํ•™์Šต ๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

๐Ÿ”ฅ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„/๐Ÿ“Œ ๊ณผ์ œ

[๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Spring_3๊ธฐ] CH1 ๋ง›์ง‘ ๊ด€๋ฆฌ API ์„ค๊ณ„ํ•˜๊ธฐ

jiiimni 2026. 1. 27. 14:16

๐Ÿฝ๏ธ ๋ง›์ง‘ ๊ด€๋ฆฌ API ์„ค๊ณ„ & Mock ์„œ๋ฒ„ ์—ฐ๋™ ๊ณผ์ œ ํšŒ๊ณ 

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

๊ฐ•์˜๋ฅผ ํ†ตํ•ด ์›น ํ”„๋กœ์ ํŠธ์˜ ํ๋ฆ„์„ ๊ฐœ๋…์ ์œผ๋กœ ์ดํ•ดํ–ˆ๋‹ค๋ฉด,
์˜ค๋Š˜์€ ๊ทธ ๊ฐœ๋…๋“ค์„ ์‹ค์ œ ํ™”๋ฉด, ์š”์ฒญ๊ณผ ์‘๋‹ต, ์ฝ”๋“œ์™€ ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ํ•˜๋‚˜์”ฉ ์—ฐ๊ฒฐํ•ด๋ณธ ๋‚ ์ด์—ˆ๋‹ค.


โœ… ํ•„์ˆ˜ ๊ธฐ๋Šฅ (1) API ์‹๋ณ„ํ•˜๊ธฐ – ์‹ค์ œ ์„œ๋น„์Šค API ๋ถ„์„

๊ณผ์ œ์˜ ์ฒซ ๋‹จ๊ณ„๋Š” ์‹ค์ œ ์„œ๋น„์Šค์˜ API๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
์นด์นด์˜ค๋งต์—์„œ ๋ช…๋™๊ต์ž ๋ณธ์  ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ ๋’ค,
๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Network ํƒญ์„ ํ†ตํ•ด ํ•ด๋‹น ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” API ์š”์ฒญ์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ดค๋‹ค.

์ฒ˜์Œ Network ํƒญ์„ ์—ด์—ˆ์„ ๋•Œ๋Š” ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์•„
์–ด๋–ค API๊ฐ€ ์‹ค์ œ๋กœ ํ™”๋ฉด์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‰ฝ์ง€ ์•Š์•˜๋‹ค.

๊ทธ๋ž˜์„œ ๋ฌด์ž‘์ • URL๋งŒ ๋ณด๋Š” ๋Œ€์‹ ,
Preview์™€ Response ํƒญ์„ ๋ฒˆ๊ฐˆ์•„ ๋ณด๋ฉฐ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜๋ฉด์„œ
ํ•„์š”ํ•œ ์š”์ฒญ์„ ํ•˜๋‚˜์”ฉ ์ถ”๋ ค๋ƒˆ๋‹ค.

๊ทธ์ค‘ ์žฅ์†Œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์˜€๋‹ค.

์ด API๋Š” Request Body ์—†์ด
URL ๊ฒฝ๋กœ์— ํฌํ•จ๋œ ์žฅ์†Œ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์š”์ฒญ์„ ๋ฐ›๊ณ ,
์žฅ์†Œ ์ด๋ฆ„, ์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ, ์นดํ…Œ๊ณ ๋ฆฌ, ํ‰์  ๋“ฑ์˜ ์ •๋ณด๋ฅผ
JSON ํ˜•ํƒœ๋กœ ์‘๋‹ตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.


โœ… ํ•„์ˆ˜ ๊ธฐ๋Šฅ (2) API ๋ช…์„ธ์„œ ๋งŒ๋“ค๊ธฐ

(๋“ฑ๋ก / ์ „์ฒด ์กฐํšŒ / ์‚ญ์ œ)

์‹ค์ œ ์„œ๋น„์Šค API ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•œ ๋’ค,
์ด๋ฅผ ์ฐธ๊ณ ํ•ด ๋ง›์ง‘ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•œ API ๋ช…์„ธ์„œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ–ˆ๋‹ค.

์„ค๊ณ„ํ•œ API๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • POST /places – ๋ง›์ง‘ ๋“ฑ๋ก
  • GET /places – ๋ง›์ง‘ ์ „์ฒด ์กฐํšŒ
  • DELETE /places/{id} – ๋ง›์ง‘ ์‚ญ์ œ

 

๊ฐ API์— ๋Œ€ํ•ด
Method, URL, Request Body, Response Body, Status Code๋ฅผ
๋ช…์„ธ์„œ ํ˜•ํƒœ๋กœ ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ–ˆ๋‹ค.

์ด ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์€
์‘๋‹ต์„ ์–ด๋””๊นŒ์ง€ ์ •์˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€์˜€๋‹ค.
ํŠนํžˆ DELETE API์˜ ๊ฒฝ์šฐ,
์‚ญ์ œ ํ›„ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ ธ๋‹ค.

์ •๋ฆฌํ•ด๋ณด๋‹ˆ,
์‚ญ์ œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ํ‘œํ˜„ํ•  ๋•Œ๋Š”
204 No Content ์ƒํƒœ ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ
“API๋Š” ์ฝ”๋“œ๋ณด๋‹ค ๋จผ์ € ์ •๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ์•ฝ์†”์ด๋ผ๋Š” ๋ง์ด
์กฐ๊ธˆ์”ฉ ์™€๋‹ฟ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.


โœ… ํ•„์ˆ˜ ๊ธฐ๋Šฅ (3) Mock ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

์ž‘์„ฑํ•œ API ๋ช…์„ธ์„œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ
Postman์„ ์ด์šฉํ•ด Mock ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค.

์ง„ํ–‰ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Postman Collection ์ƒ์„ฑ
  • ๊ฐ API ์š”์ฒญ์— Example ์‘๋‹ต ์ถ”๊ฐ€
  • Mock ์„œ๋ฒ„ ์ƒ์„ฑ
  • baseURL ์„ค์ •
  • POST / GET / DELETE ์š”์ฒญ ํ…Œ์ŠคํŠธ

์ด ๊ณผ์ •์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ง‰ํ˜”๋˜ ๋ถ€๋ถ„์€
Example ์‘๋‹ต์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด Mock ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด์—ˆ๋‹ค.

์ฒ˜์Œ์—๋Š” Mock ์„œ๋ฒ„๊ฐ€ ์‹ค์ œ ์„œ๋ฒ„์ฒ˜๋Ÿผ
์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์ž๋™์œผ๋กœ ์‘๋‹ตํ•ด์ค„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ์ง€๋งŒ,
Mock ์„œ๋ฒ„๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ์š”์ฒญ๊ณผ Example ์‘๋‹ต์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ๋งŒ
์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋˜ ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”๋ฐ ๊ณ„์† 404 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด
ํ™•์ธํ•ด๋ณด๋‹ˆ,
Collection์— ์ •์˜ํ•œ ๊ฒฝ๋กœ์™€ ์‹ค์ œ ์š”์ฒญ ๊ฒฝ๋กœ๊ฐ€
์กฐ๊ธˆ์ด๋ผ๋„ ๋‹ค๋ฅด๋ฉด ์‘๋‹ต์ด ์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋‹ค.

์ด๋Ÿฐ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์œผ๋ฉฐ
Mock ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํ•œ ๊ฐ€์งœ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ผ,
์š”์ฒญ๊ณผ ์‘๋‹ต ํ๋ฆ„์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋ผ๋Š” ์ ์„ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ฒŒ ๋๋‹ค.


๐Ÿš€ ๋„์ „ ๊ธฐ๋Šฅ (1) v0๋กœ ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ

๋„์ „ ๊ณผ์ œ๋กœ v0๋ฅผ ํ™œ์šฉํ•ด Mock ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ง›์ง‘ ๊ด€๋ฆฌ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

v0๋กœ ์ƒ์„ฑํ•œ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ,
์ฒ˜์Œ๋ถ€ํ„ฐ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค.

Tailwind์™€ shadcn ๊ด€๋ จ ์„ค์ •์ด
๋กœ์ปฌ ํ™˜๊ฒฝ๊ณผ ๋งž์ง€ ์•Š์•„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ ,
์„ค์ • ํŒŒ์ผ์„ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ถˆํ•„์š”ํ•œ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ–ˆ๋‹ค.

์ด ๊ณผ์ •์„ ํ†ตํ•ด
AI๊ฐ€ ์ƒ์„ฑํ•œ ์ฝ”๋“œ๋ผ๋„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,
๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ณ  ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค
๋Š” ์ ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋А๊ผˆ๋‹ค.

 


๐Ÿš€ ๋„์ „ ๊ธฐ๋Šฅ (2) ํ”„๋ก ํŠธ์—”๋“œ์™€ Mock ์„œ๋ฒ„ ์—ฐ๋™

ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ๋’ค,
Mock ์„œ๋ฒ„์˜ baseURL์„ ์—ฐ๊ฒฐํ•ด ์‹ค์ œ๋กœ ์š”์ฒญ์ด ์˜ค๊ฐ€๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

  • ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ GET /places ์š”์ฒญ
  • ๋ง›์ง‘ ๋“ฑ๋ก ์‹œ POST /places ์š”์ฒญ
  • ์‚ญ์ œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ DELETE /places/{id} ์š”์ฒญ

Mock ์„œ๋ฒ„๊ฐ€ ๋ฏธ๋ฆฌ ์ •์˜๋œ Example ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด,
ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๊ทธ ์‘๋‹ต์„ ๊ธฐ์ค€์œผ๋กœ ํ™”๋ฉด์„ ๊ฐฑ์‹ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

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


โš ๏ธ ์‹คํ–‰ ์ค‘ ๊ฒช์€ ๋ฌธ์ œ๋“ค

  • ํ™”๋ฉด์€ ๋œจ์ง€๋งŒ ๊ณ„์† ๋กœ๋”ฉ ์ƒํƒœ๋กœ ๋ฉˆ์ถ”๋Š” ๋ฌธ์ œ
  • Mock ์„œ๋ฒ„ ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์•„ Network ํƒญ์œผ๋กœ ์š”์ฒญ ์ง์ ‘ ํ™•์ธ
  • Mock ์„œ๋ฒ„๋Š” ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์ 

์—ฌ๋Ÿฌ ๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ง์ ‘ ํ™•์ธํ•˜๋ฉด์„œ,
Mock ์„œ๋ฒ„์™€ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์˜ ์ฐจ์ด๋ฅผ
๊ฐœ๋…์ด ์•„๋‹Œ ๊ฒฝํ—˜์œผ๋กœ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


๐Ÿ“ ์˜ค๋Š˜์˜ ์ •๋ฆฌ

  • API๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์•ฝ์†์ด๋‹ค
  • Mock ์„œ๋ฒ„๋Š” ํ˜‘์—…๊ณผ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ฒ€์ฆ ๋„๊ตฌ๋‹ค
  • ํ”„๋ก ํŠธ์—”๋“œ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์‘๋‹ต์„ ๋ฐ›์•„ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค
  • ๋ฐฑ์—”๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค

์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด
์‹ค์ œ ์„œ๋น„์Šค API ๋ถ„์„ → API ์„ค๊ณ„ → Mock ์„œ๋ฒ„ ๊ตฌ์ถ• → ํ”„๋ก ํŠธ์—”๋“œ ์—ฐ๋™์ด๋ผ๋Š”
์›น ํ”„๋กœ์ ํŠธ ํ•œ ์‚ฌ์ดํด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ง์ ‘ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ค‘๊ฐ„์ค‘๊ฐ„ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„๋„ ๋งŽ์•˜์ง€๋งŒ,
๊ทธ ๊ณผ์ • ๋•๋ถ„์—
๊ฐœ๋…์œผ๋กœ๋งŒ ์•Œ๊ณ  ์žˆ๋˜ ๋‚ด์šฉ๋“ค์ด ์‹ค์ œ ํ๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.