S03L10 – ์Šคํ”„๋ง ๋ถ€ํŠธ ์ธ์ฆ ์ปจํŠธ๋กค๋Ÿฌ, ๊ณ„์†

html

์Šคํ”„๋ง ๋ถ€ํŠธ API ํ–ฅ์ƒ: RESTful ๊ทœ์น™ ์ค€์ˆ˜ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”

๋ชฉ์ฐจ


์†Œ๊ฐœ

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

์ฃผ์š” ํ•˜์ด๋ผ์ดํŠธ

  • RESTful ๊ทœ์น™: ์‚ฐ์—… ํ‘œ์ค€ URL ํŒจํ„ด ์ดํ•ด ๋ฐ ๊ตฌํ˜„.
  • ๋ณด์•ˆ ํ–ฅ์ƒ: ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐ ์ธ์ฆ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ.
  • ํ† ํฐ ๊ด€๋ฆฌ: JWT ํ† ํฐ์„ ํ™œ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•œ API ์ ‘๊ทผ.
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ ์ ˆํ•œ ์‘๋‹ต ์ฝ”๋“œ ๊ตฌํ˜„.
  • ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™”: Swagger๋ฅผ ํ™œ์šฉํ•˜์—ฌ API ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™”.

์žฅ๋‹จ์ 

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

์–ธ์ œ ๊ทธ๋ฆฌ๊ณ  ์–ด๋””์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ธ๊ฐ€

ํ™•์žฅ์„ฑ, ๋ณด์•ˆ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ•„์š”ํ•œ API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ด๋Ÿฌํ•œ ๊ด€ํ–‰์„ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ํ•„์š”ํ•˜๋ฉฐ, ๋†’์€ ์‹ ๋ขฐ์„ฑ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.


RESTful API ๊ทœ์น™ ์ดํ•ดํ•˜๊ธฐ

REST(Representational State Transfer)๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. RESTful ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋ฉด API๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ์ผ๊ด€๋˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

REST์˜ ํ•ต์‹ฌ ์›์น™

  1. ๋ฌด์ƒํƒœ์„ฑ(Statelessness): ํด๋ผ์ด์–ธํŠธ์˜ ๊ฐ ์š”์ฒญ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋Š” ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  3. ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค(Uniform Interface): ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ผ๊ด€๋˜๊ณ  ํ‘œ์ค€ํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹.
  4. ๊ณ„์ธตํ™” ์‹œ์Šคํ…œ(Layered System): ๊ณ„์ธต์  ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ RESTful URL ํŒจํ„ด

  • ๋ช…์‚ฌ๋กœ์„œ์˜ ๋ฆฌ์†Œ์Šค: URL์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: /users, /orders).
  • HTTP ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ:
    • GET: ๋ฆฌ์†Œ์Šค ์กฐํšŒ.
    • POST: ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ.
    • PUT: ๊ธฐ์กด ๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ.
    • DELETE: ๋ฆฌ์†Œ์Šค ์‚ญ์ œ.
  • ๊ณ„์ธต์  ๊ตฌ์กฐ: ์ค‘์ฒฉ๋œ ๋ฆฌ์†Œ์Šค๋Š” ๊ทธ ๊ด€๊ณ„๋ฅผ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: /users/{userId}/orders).

RESTful ๊ทœ์น™ ์ค€์ˆ˜์˜ ์ด์ 

  • ์ผ๊ด€์„ฑ: ๊ฐœ๋ฐœ์ž๊ฐ€ API๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: API์˜ ํ™•์žฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค.
  • ์ƒํ˜ธ์šด์šฉ์„ฑ: ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋น„์Šค์™€์˜ ํ˜ธํ™˜์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

REST ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ URL ํŒจํ„ด ์—…๋ฐ์ดํŠธ

API์˜ URL ํŒจํ„ด์ด RESTful ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์ง๊ด€์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์›น ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์‚ฐ์—… ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ API์˜ URL ๊ตฌ์กฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ URL ํŒจํ„ด ๋ฌธ์ œ์ 

์ œ๊ณต๋œ ๊ฐ•์˜์—์„œ๋Š” ์ดˆ๊ธฐ URL ํŒจํ„ด์ด RESTful ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์—”ํ„ฐํ‹ฐ ์‹๋ณ„์ž(userId)๊ฐ€ URL ๋‚ด์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์œ„์น˜ํ•˜์ง€ ์•Š์•„ ๋ถˆ์ผ์น˜ ๋ฐ ์ž ์žฌ์ ์ธ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ์ดˆ๋ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

URL ๊ตฌ์กฐ ์ˆ˜์ •

์ž˜๋ชป๋œ URL ๊ตฌ์กฐ:

RESTful URL ๊ตฌ์กฐ:

๊ตฌํ˜„ ๋‹จ๊ณ„

  1. URL์— ์—”ํ„ฐํ‹ฐ ์ •์˜:
    • userId๋ฅผ ๋ฆฌ์†Œ์Šค์™€ ๋™์ž‘ ์‚ฌ์ด์— ์œ„์น˜์‹œํ‚ต๋‹ˆ๋‹ค.
  2. ์ปจํŠธ๋กค๋Ÿฌ ๋งคํ•‘ ์—…๋ฐ์ดํŠธ:
    • ์ƒˆ๋กœ์šด URL ๊ตฌ์กฐ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์ปจํŠธ๋กค๋Ÿฌ์˜ @RequestMapping ์• ๋…ธํ…Œ์ด์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ์˜ ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ:

์—…๋ฐ์ดํŠธ๋œ ๊ตฌ์กฐ์˜ ์ด์ 

  • ๋ช…ํ™•์„ฑ: ๋ฆฌ์†Œ์Šค(users)์™€ ํŠน์ • ์‚ฌ์šฉ์ž({userId})๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ํ™•์žฅ์„ฑ: ์‚ฌ์šฉ์ž์™€ ๊ด€๋ จ๋œ ์ถ”๊ฐ€ ๋™์ž‘์„ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๊ด€์„ฑ: RESTful API ํ‘œ์ค€๊ณผ ์ผ์น˜ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋” ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.

URL ๊ตฌ์กฐ์˜ ํ‘œ ๋น„๊ต

์ธก๋ฉด RESTful์ด ์•„๋‹Œ URL RESTful URL
์—”ํ„ฐํ‹ฐ ์œ„์น˜ ์—”๋“œํฌ์ธํŠธ์— ๋™์ž‘ ํฌํ•จ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ์— ์—”ํ„ฐํ‹ฐ ์‹๋ณ„์ž ํฌํ•จ
HTTP ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ๋˜์ง€ ์•Š์Œ ์ ์ ˆํ•œ HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ
ํ™•์žฅ์„ฑ ํ™•์žฅ์„ฑ ์ œํ•œ๋จ ์ค‘์ฒฉ๋œ ๊ฒฝ๋กœ๋กœ ๋†’์€ ํ™•์žฅ์„ฑ
๋ช…ํ™•์„ฑ ๋™์ž‘ ์ง€ํ–ฅ์  ๋ฆฌ์†Œ์Šค ์ง€ํ–ฅ์ 

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ๋ณด์•ˆ ์„ค์ • ๊ตฌ์„ฑ

๋ณด์•ˆ์€ API ๊ฐœ๋ฐœ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค. ๋ณด์•ˆ ์„ค์ •์„ ์ ์ ˆํžˆ ๊ตฌ์„ฑํ•˜๋ฉด ์Šน์ธ๋œ ์‚ฌ์šฉ์ž๋งŒ์ด ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์—…๋ฐ์ดํŠธ๋œ RESTful URL ํŒจํ„ด์— ๋งž๊ฒŒ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ๋ณด์•ˆ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋ณด์•ˆ ๊ตฌ์„ฑ ๋ฌธ์ œ์ 

์ดˆ๊ธฐ ๋ณด์•ˆ ์„ค์ •์—์„œ๋Š” ๋‹จ์ผ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž(*)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ๊ณ„๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค:

  • ์œ ์—ฐ์„ฑ ๋ถ€์กฑ: * ์™€์ผ๋“œ์นด๋“œ๋Š” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ ์šฉ๋˜๋ฉฐ ํŠน์ • URL ํŒจํ„ด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž ์žฌ์  ์˜ค๋ฅ˜: ๋ถ€์ ์ ˆํ•œ ์™€์ผ๋“œ์นด๋“œ ์‚ฌ์šฉ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถฉ๋Œ์ด๋‚˜ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ์™€์ผ๋“œ์นด๋“œ ์ฑ„ํƒ

๋ณด์•ˆ ์„ค์ •์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ •๋ฐ€ํ•œ ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, * ๋Œ€์‹  /**๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์™€์ผ๋“œ์นด๋“œ๊ฐ€ URL ๊ฒฝ๋กœ ์ „์ฒด์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๋‹จ๊ณ„

  1. ๋ณด์•ˆ ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ:
    • URL ๋งคํ•‘์˜ ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด์„ ์กฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด SecurityConfig ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ:
  3. ์„ค๋ช…:
    • antMatchers("/users/**"): /users/ ์•„๋ž˜์˜ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ์— ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • .hasRole("ADMIN"): ADMIN ์—ญํ• ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ ‘๊ทผ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
    • .anyRequest().authenticated(): ๋‹ค๋ฅธ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด ์ธ์ฆ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ •๋ฐ€ํ•œ ์™€์ผ๋“œ์นด๋“œ ์‚ฌ์šฉ์˜ ์ด์ 

  • ์„ธ๋ถ„ํ™”๋œ ์ œ์–ด: ๋‹ค๋ฅธ URL ์„ธ๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ทœ์น™์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๊ฐ•ํ™”: ์ ‘๊ทผ ๊ทœ์น™์„ ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์—ฌ ๋ฌด๋‹จ ์ ‘๊ทผ์˜ ์œ„ํ—˜์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ: ํ–ฅํ›„ API ํ™•์žฅ ๋ฐ ์ˆ˜์ •์— ์‰ฝ๊ฒŒ ์ ์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋ณด์•ˆ ๋ฌธ์ œ ์ฒ˜๋ฆฌ

  • 500 ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜: ์™€์ผ๋“œ์นด๋“œ๊ฐ€ ์ž˜๋ชป ๊ตฌ์„ฑ๋˜๋ฉด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /**๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉ๋˜๋„๋ก ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌด๋‹จ ์ ‘๊ทผ: ์—ญํ•  ๋ฐ ๊ถŒํ•œ์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๋ฌด๋‹จ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์˜ ์œ„ํ—˜์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ๊ตฌํ˜„

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ, ํŠนํžˆ JSON Web Tokens(JWT)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด API์˜ ๋ณด์•ˆ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ ํ† ํฐ์„ ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

JWT ์†Œ๊ฐœ

JWT๋Š” ๋‘ ๋‹น์‚ฌ์ž ๊ฐ„์— ์ „์†ก๋  ํด๋ ˆ์ž„์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  URL ์•ˆ์ „ํ•œ ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ์•ˆ์ „ํ•œ ์ •๋ณด ๊ตํ™˜์„ ๋ณด์žฅํ•˜๋ฉฐ ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ชฉ์ ์œผ๋กœ ๋„๋ฆฌ ์ฑ„ํƒ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ์šฐ ๊ฐœ์š”

  1. ์‚ฌ์šฉ์ž ์ธ์ฆ: ์‚ฌ์šฉ์ž๊ฐ€ ์ž๊ฒฉ ์ฆ๋ช…(์˜ˆ: ์ด๋ฉ”์ผ ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ)์„ ์ œ๊ณต.
  2. ํ† ํฐ ์ƒ์„ฑ: ์ธ์ฆ์— ์„ฑ๊ณตํ•˜๋ฉด JWT๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  3. ํ† ํฐ ์‚ฌ์šฉ: ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ์š”์ฒญ์—์„œ Authorization ํ—ค๋”์— ํ† ํฐ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  4. ํ† ํฐ ๊ฒ€์ฆ: ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.

JWT ํ† ํฐ ์ƒ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ํ† ํฐ ์ƒ์„ฑ ์˜ˆ์‹œ:

์„ค๋ช…:

  • Subject: ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ ๋˜๋Š” ๊ณ ์œ  ์‹๋ณ„์ž.
  • Claims: ์‚ฌ์šฉ์ž ์—ญํ• ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ.
  • Issued At & Expiration: ํ† ํฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„์„ ์ •์˜.
  • Signature: ํ† ํฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅ.

JWT ํ† ํฐ ๊ฒ€์ฆ

ํ† ํฐ ๊ฒ€์ฆ ์˜ˆ์‹œ:

์„ค๋ช…:

  • ํ† ํฐ์€ ์‹œํฌ๋ฆฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์‹ฑ ๋ฐ ๊ฒ€์ฆ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ๋Š” ํ† ํฐ์ด ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ณ€์กฐ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์š”์ฒญ ์‹œ ํ† ํฐ ํฌํ•จ

ํด๋ผ์ด์–ธํŠธ๋Š” Authorization ํ—ค๋”์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ† ํฐ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

ํ† ํฐ ๋งŒ๋ฃŒ ๋ฐ ๊ฐฑ์‹  ์ฒ˜๋ฆฌ

ํ† ํฐ ๋งŒ๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ๋ณด์•ˆ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ† ํฐ ๊ฐฑ์‹  ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ์‘๋‹ต ์ฝ”๋“œ

์ ์ ˆํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ API๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ API์—์„œ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜๋ฏธ ์žˆ๋Š” ์‘๋‹ต ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ HTTP ์‘๋‹ต ์ฝ”๋“œ

์ฝ”๋“œ ์˜๋ฏธ ์‚ฌ์šฉ ์˜ˆ
200 OK ์„ฑ๊ณต์ ์ธ GET, PUT ๋˜๋Š” DELETE ์š”์ฒญ
201 Created ์„ฑ๊ณต์ ์ธ POST ์š”์ฒญ
400 Bad Request ์ž˜๋ชป๋œ ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ํŽ˜์ด๋กœ๋“œ
401 Unauthorized ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…
403 Forbidden ์ธ์ฆ๋˜์—ˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†์Œ
404 Not Found ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
500 Internal Server Error ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์„œ๋ฒ„ ์ธก ์˜ค๋ฅ˜

๋งž์ถคํ˜• ์˜ค๋ฅ˜ ์‘๋‹ต ๊ตฌํ˜„

๋”์šฑ ์œ ์ตํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด, ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์‘๋‹ต ๋ณธ๋ฌธ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋งž์ถคํ˜• ์˜ค๋ฅ˜ ์‘๋‹ต ์˜ˆ์‹œ:

์ปจํŠธ๋กค๋Ÿฌ ์˜ˆ์‹œ:

ํŠน์ • ์˜ค๋ฅ˜ ์‹œ๋‚˜๋ฆฌ์˜ค ์ฒ˜๋ฆฌ

  1. ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž:
    • ์‘๋‹ต ์ฝ”๋“œ: 400 Bad Request
    • ๋ฉ”์‹œ์ง€: "Invalid User"
  2. ๋ฌด๋‹จ ์ ‘๊ทผ:
    • ์‘๋‹ต ์ฝ”๋“œ: 403 Forbidden
    • ๋ฉ”์‹œ์ง€: "Access Denied"
  3. ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜:
    • ์‘๋‹ต ์ฝ”๋“œ: 500 Internal Server Error
    • ๋ฉ”์‹œ์ง€: "An unexpected error occurred"

์ ์ ˆํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์˜ ์ด์ 

  • ๋ช…ํ™•์„ฑ: ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋””๋ฒ„๊น…: ๋ฌธ์ œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜: API์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Swagger ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ

Swagger๋Š” RESTful API๋ฅผ ์„ค๊ณ„, ๋นŒ๋“œ, ๋ฌธ์„œํ™” ๋ฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” API ํ…Œ์ŠคํŠธ ๋ฐ ๋ฌธ์„œํ™”๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Swagger๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Swagger ์†Œ๊ฐœ

Swagger๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด API ์—”๋“œํฌ์ธํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. API์˜ ์• ๋…ธํ…Œ์ด์…˜๊ณผ ๊ตฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ์— Swagger ํ†ตํ•ฉ

  1. Swagger ์˜์กด์„ฑ ์ถ”๊ฐ€:
    • pom.xml์— ๋‹ค์Œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

  1. Swagger ๊ตฌ์„ฑ:
    • Swagger ๊ตฌ์„ฑ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. Swagger ๊ตฌ์„ฑ ์˜ˆ์‹œ:
  1. Swagger UI ์ ‘๊ทผ:
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด http://localhost:8080/swagger-ui/๋กœ ์ด๋™ํ•˜์—ฌ Swagger ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Swagger๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ

  • ์—”๋“œํฌ์ธํŠธ ํƒ์ƒ‰: ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  API ์—”๋“œํฌ์ธํŠธ์™€ ๊ทธ ์„ค๋ช…์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์š”์ฒญ ์‹คํ–‰: ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ Swagger UI์—์„œ ์ง์ ‘ API ์ž‘์—…์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์‘๋‹ต ๊ฒ€ํ† : ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ์ƒํƒœ ์ฝ”๋“œ ๋ฐ ์‘๋‹ต ๋ณธ๋ฌธ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

Swagger ๋ฌธ์„œ ๊ฐœ์„ 

  • ์• ๋…ธํ…Œ์ด์…˜: @Api, @ApiOperation, @ApiResponse์™€ ๊ฐ™์€ Swagger ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ํ’๋ถ€ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • API ๊ทธ๋ฃนํ™”: ๊ด€๋ จ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๊ตฌ์„ฑ: ๊ฐ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ๋ณด์•ˆ ์Šคํ‚ค๋งˆ ๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.

Swagger๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ ์˜ˆ์‹œ

์˜ˆ์‹œ:

Swagger ์‚ฌ์šฉ์˜ ์ด์ 

  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ฌธ์„œํ™”: API๋ฅผ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์ผ๊ด€์„ฑ: ๋ฌธ์„œ๊ฐ€ ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ์ž ํšจ์œจ์„ฑ: ์ˆ˜๋™ ๋ฌธ์„œํ™”์˜ ํ•„์š”์„ฑ์„ ์ค„์—ฌ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

ํ•ต์‹ฌ ์š”์ 

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

์ด๋Ÿฌํ•œ ๊ด€ํ–‰์„ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์— ํ†ตํ•ฉํ•จ์œผ๋กœ์จ ํ˜„๋Œ€์ ์ธ ํ‘œ์ค€๊ณผ ์‚ฌ์šฉ์ž ๊ธฐ๋Œ€์— ๋ถ€์‘ํ•˜๋Š” ๊ณ ํ’ˆ์งˆ API๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SEO ์ตœ์ ํ™” ํ‚ค์›Œ๋“œ

Spring Boot API, RESTful ๊ทœ์น™, Spring Boot ๋ณด์•ˆ, JWT ์ธ์ฆ, API ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, Swagger ๋ฌธ์„œํ™”, ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ, REST API ์„ค๊ณ„, Spring Boot ๋ชจ๋ฒ” ์‚ฌ๋ก€, ์•ˆ์ „ํ•œ API ๊ฐœ๋ฐœ


์ถ”๊ฐ€ ์ž๋ฃŒ


์ฐธ๊ณ : ์ด ๊ธฐ์‚ฌ๋Š” AI์— ์˜ํ•ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.






Share your love