CodeGym/Java Blog/๋ฌด์ž‘์œ„์˜/REST ๊ฐœ์š”. ํŒŒํŠธ 2: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ 
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

REST ๊ฐœ์š”. ํŒŒํŠธ 2: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ 

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
ํšŒ์›
REST ๊ฐœ์š”. ํŒŒํŠธ 1: REST๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด ๋ถ€๋ถ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ์šฉ์–ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ์„ค๋ช…ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. REST ๊ฐœ์š”.  2๋ถ€: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹  - 1๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด RESTful ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ˆ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ†ต์‹ ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ ๋ฐ ์ฃผ๋ฌธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœ ์ค‘์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์€ ํŠน์ • ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—”ํ„ฐํ‹ฐ๋ฅผ ์ƒ์„ฑ, ํŽธ์ง‘ ๋ฐ ์‚ญ์ œํ•˜๊ณ  ์—”ํ„ฐํ‹ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—”ํ„ฐํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ฐ (๊ณ ๊ฐ)
  • ์ฃผ๋ฌธ(๊ณ ๊ฐ ์ฃผ๋ฌธ)
  • ํ•ญ๋ชฉ (์ œํ’ˆ)
RESTful ์•„ํ‚คํ…์ฒ˜์—์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์š”์ฒญ

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ ๊ฑฐ์˜ ํ•ญ์ƒ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ HTTP ์š”์ฒญ์€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • HTTP ๋ฐฉ์‹
  • ๋จธ๋ฆฌ๊ธ€
  • URI
  • ์š”์ฒญ ๋ณธ๋ฌธ
์•„๋ž˜์—์„œ ์šฐ๋ฆฌ๋Š” ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋” ์ž์„ธํžˆ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

URI ๋ฐ ๋ฆฌ์†Œ์Šค

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ†ตํ•ด ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์†Œ์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ†ต์‹ ์€ ๋ฆฌ์†Œ์Šค ์กฐ์ž‘์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. REST์—์„œ ๋ฆฌ์†Œ์Šค๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์˜๋ฏธ์—์„œ ๊ทธ๊ฒƒ๋“ค์€ Java์˜ ํด๋ž˜์Šค์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. Java์—์„œ๋Š” ๋ฌด์—‡์ด๋“  ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ REST์—์„œ ๋ฆฌ์†Œ์Šค๋Š” ์‚ฌ์šฉ์ž, ๋ฌธ์„œ, ๋ณด๊ณ ์„œ, ์ฃผ๋ฌธ ๋“ฑ ๋ฌด์—‡์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์—”ํ„ฐํ‹ฐ์˜ ์ถ”์ƒํ™”์ด๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋˜๋Š” PDF ํŒŒ์ผ๊ณผ ๊ฐ™์€ ํŠน์ • ํ•ญ๋ชฉ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—๋Š” 3๊ฐœ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๊ฐ (๊ณ ๊ฐ)
  • ์ฃผ๋ฌธ(๊ณ ๊ฐ ์ฃผ๋ฌธ)
  • ํ•ญ๋ชฉ (์ œํ’ˆ)
ํด๋ผ์ด์–ธํŠธ๋Š” ์—”๋“œํฌ์ธํŠธ๋ผ๊ณ  ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์œ„์น˜๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด ์—”๋“œํฌ์ธํŠธ ๋Š” ๋„คํŠธ์›Œํฌ์˜ ์ฃผ์†Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€๋ฉด ์—”๋“œํฌ์ธํŠธ๊ฐ€ URI ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์ฆ‰ ์ถ”์ƒ ๋˜๋Š” ๋ฌผ๋ฆฌ์  ์ž์›์„ ์‹๋ณ„ํ•˜๋Š” ์ผ๋ จ์˜ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. URI(Uniform Resource Identifier) โ€‹โ€‹๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์—”๋“œํฌ์ธํŠธ ๋˜๋Š” URI๋ฅผ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ๋กœ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” URI๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํŠน์ • ๋ฆฌ์†Œ์Šค์—๋Š” ๊ณ ์œ ํ•œ URI๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ญ์ƒ ์ž์ฒด URI๋ฅผ ๊ฐ–๋„๋ก ํ•  ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ ์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆซ์ž ์‹๋ณ„์ž๋ฅผ ๊ธฐ๋ณธ ํ‚ค๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋“ฏ์ด ๊ฐ ๋ฆฌ์†Œ์Šค๋„ REST์—์„œ ๊ณ ์œ ํ•œ ID๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. REST์˜ ๋ฆฌ์†Œ์Šค ID๋Š” ์ข…์ข… ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ ˆ์ฝ”๋“œ ID์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. REST URI๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ช…์‚ฌ์˜ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "
  • /customers โ€” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ณ ๊ฐ์˜ URI
  • /customers/23 โ€” ํŠน์ • ๊ณ ๊ฐ์˜ URI, ์ฆ‰ ID=23์ธ ๊ณ ๊ฐ
  • /customers/4 โ€” ํŠน์ • ๊ณ ๊ฐ์˜ URI, ์ฆ‰ ID๊ฐ€ 4์ธ ๊ณ ๊ฐ.
ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ๋‹ค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฃผ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ URI๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • /customers/4/orders โ€” 4๋ฒˆ ๊ณ ๊ฐ์˜ ๋ชจ๋“  ์ฃผ๋ฌธ URI
  • /customers/1/orders/12 โ€” 1๋ฒˆ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ•œ 12๋ฒˆ ์ฃผ๋ฌธ์˜ URI.
๋” ๋งŽ์€ ์ œํ’ˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™•์žฅ์„ ๊ณ„์†ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • /customers/1/orders/12/items โ€” 1๋ฒˆ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ•œ 12๋ฒˆ ์ฃผ๋ฌธ์˜ ๋ชจ๋“  ์ œํ’ˆ ๋ชฉ๋ก URI.
์ค‘์ฒฉ ์ˆ˜์ค€์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ค‘์š”ํ•œ ๊ฒƒ์€ URI๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

HTTP ๋ฐฉ์‹

HTTP ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์†Œ์Šค์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ธฐ๋ณธ ์ž‘์—…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ชจ๋“  ๋ฌธ์ž(์ œ์–ด ๋ฌธ์ž ๋ฐ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ ์ œ์™ธ)์˜ ์‹œํ€€์Šค์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. RESTful ์„œ๋น„์Šค์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•ญ๋ชฉ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.
  • GET โ€” ํŠน์ • ๋ฆฌ์†Œ์Šค(ํ•ด๋‹น ID๋ฅผ ํ†ตํ•ด) ๋˜๋Š” ๋ฆฌ์†Œ์Šค ๋ชจ์Œ์— ๋Œ€ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
  • POST โ€” ์ƒˆ ๋ฆฌ์†Œ์Šค ๋งŒ๋“ค๊ธฐ
  • PUT โ€” ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ(ID๋ฅผ ํ†ตํ•ด)
  • DELETE โ€” ๋ฆฌ์†Œ์Šค ์‚ญ์ œ(ID๋ฅผ ํ†ตํ•ด)

ํ—ค๋”

์š”์ฒญ๊ณผ ์‘๋‹ต์—๋Š” HTTP ํ—ค๋”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ(๋˜๋Š” ์‘๋‹ต)์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋”๋Š” ํ‚ค-๊ฐ’ ์Œ์ž…๋‹ˆ๋‹ค. Wikipedia ์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ—ค๋” ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . REST์˜ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ข…์ข… ์„œ๋ฒ„์— ๋Œ€ํ•œ ์š”์ฒญ์— "Accept" ํ—ค๋”๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต์„ ๋ฐ›์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋Š” ํ˜•์‹์„ ์„œ๋ฒ„์— ์•Œ๋ ค์ฃผ๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ˜•์‹์ด MIME ์œ ํ˜• ๋ชฉ๋ก์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. MIME (Multipurpose Internet Mail Extensions)๋Š” ์ •๋ณด๋ฅผ ์ธ์ฝ”๋”ฉํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ˜•์‹์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์–‘์ž…๋‹ˆ๋‹ค. ๊ฐ MIME ์œ ํ˜•์€ ์Šฌ๋ž˜์‹œ๋กœ ๊ตฌ๋ถ„๋œ ์œ ํ˜•๊ณผ ํ•˜์œ„ ์œ ํ˜•์˜ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํŒŒ์ผ์— ๋Œ€ํ•œ MIME ์œ ํ˜•์˜ ์˜ˆ:
  • ํ…์ŠคํŠธ โ€” ํ…์ŠคํŠธ/์ผ๋ฐ˜, ํ…์ŠคํŠธ/css, ํ…์ŠคํŠธ/html
  • ์ด๋ฏธ์ง€ โ€” ์ด๋ฏธ์ง€/png, ์ด๋ฏธ์ง€/jpeg, ์ด๋ฏธ์ง€/gif
  • ์˜ค๋””์˜ค โ€” ์˜ค๋””์˜ค/wav, ์˜ค๋””์˜ค/mpeg
  • ๋น„๋””์˜ค โ€” ๋น„๋””์˜ค/mp4, ๋น„๋””์˜ค/ogg
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ โ€” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/json, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/pdf, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/xml, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/octet-stream
์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฒญ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ—ค๋”๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Accept:application/json
์ด ํ—ค๋”๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ JSON ํ˜•์‹์˜ ์‘๋‹ต์„ ๋ฐ›์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ๋‹ค๊ณ  ์„œ๋ฒ„์— ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

์š”์ฒญ ๋ณธ๋ฌธ

์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์— ๋ณธ๋ฌธ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” HTTP ์š”์ฒญ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GET ๋ฐ DELETE ์š”์ฒญ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์š”์ฒญ ๋ณธ๋ฌธ์ด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ PUT ๋ฐ POST ์š”์ฒญ์€ ์š”์ฒญ์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, URL์— ์ „๋‹ฌ๋œ ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด(POST ์š”์ฒญ์„ ํ†ตํ•ด) ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. REST์—์„œ ์š”์ฒญ ๋ณธ๋ฌธ์€ ๋Œ€๋ถ€๋ถ„ XML ๋˜๋Š” JSON ํ˜•์‹์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. JSON ํ˜•์‹์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์žŠ์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๊ณ ๊ฐ ์ฃผ๋ฌธ์„ ๊ด€๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜ˆ๋ฅผ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ณ ๊ฐ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‚ฌ์˜ ๊ฒฝ์šฐ ์ด๋ฆ„, ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ์™€ ๊ฐ™์€ ๊ณ ๊ฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์š”์ฒญ ๋ณธ๋ฌธ์€ ๋‹ค์Œ JSON์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+1 (222) 333-4444"
}

์š”์ฒญ ๋ชจ์œผ๊ธฐ

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์š”์ฒญ์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์š”๊ตฌ ์„ค๋ช…
GET /customers/23
Accept : application/json, application/xml
23๋ฒˆ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ JSON ๋˜๋Š” XML ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
POST /customers
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+1 (222) 333-4444"
}
๋‹ค์Œ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๊ณ ๊ฐ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์ด๋ฆ„ โ€” Amigo
์ด๋ฉ”์ผ โ€” amigo@jr.com
์ „ํ™” ๋ฒˆํ˜ธ โ€” +1 (222) 333-4444
PUT /customers/1
{
  "name" : "Ben",
  "email" : "bigben@jr.com",
  "phone" : "+86 (868) 686-8686"
}
๊ณ ๊ฐ ๋ฒˆํ˜ธ 1์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฆ„ โ€” Ben
์ด๋ฉ”์ผ โ€” bigben@jr.com
์ „ํ™” ๋ฒˆํ˜ธ โ€” +86 (868) 686-8686
DELETE /customers/12/orders/6
12๋ฒˆ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ•œ 6๋ฒˆ ์ฃผ๋ฌธ์„ ์‹œ์Šคํ…œ์—์„œ ์‚ญ์ œ

์‘๋‹ต

์„œ๋ฒ„ ์‘๋‹ต์— ๋Œ€ํ•ด ๋ช‡ ๋งˆ๋”” ํ•ด๋ด…์‹œ๋‹ค. ์‘๋‹ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์‘๋‹ต ์ฝ”๋“œ
  • ํ—ค๋”
  • ์‘๋‹ต ๋ณธ๋ฌธ
์ผ๋ฐ˜์ ์œผ๋กœ ์‘๋‹ต ํ—ค๋”๋Š” ์š”์ฒญ ํ—ค๋”์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ผ๋ถ€ ํ—ค๋”๋Š” ์‘๋‹ต๊ณผ ์š”์ฒญ ๋ชจ๋‘์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ๋ณธ๋ฌธ์— ๋Œ€ํ•ด์„œ๋„ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์€ ์ข…์ข… ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. GET ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ์ •๋ณด๋Š” JSON ํ˜•์‹์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์€ ์กฐ๊ธˆ ๋” ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค.

HTTP ์‘๋‹ต ์ฝ”๋“œ

HTTP ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„ ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ฒ„ ์‘๋‹ต์˜ ์ฒซ ๋ฒˆ์งธ ๋ผ์ธ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์„ธ ์ž๋ฆฌ ์‹ญ์ง„์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ์˜ ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‘๋‹ต ์ฝ”๋“œ ๋’ค์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ์˜์–ด ์„ค๋ช… ๋ฌธ๊ตฌ๊ฐ€ ์˜ต๋‹ˆ๋‹ค. ์ด ๊ตฌ๋ฌธ์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์‘๋‹ต ์ด์œ ์ž…๋‹ˆ๋‹ค. ์˜ˆ:
  • 201 ์ƒ์„ฑ๋จ
  • 401 ๋ฌด๋‹จ
  • 507 ์Šคํ† ๋ฆฌ์ง€ ๋ถ€์กฑ
์‘๋‹ต ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ๊ณ  ๋‹ค์Œ์— ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ์ฝ”๋“œ๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค ๋˜๋Š” ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  • 1XX โ€” ์ •๋ณด ์ œ๊ณต
  • 2XX โ€” ์ด ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์‹  ๋ฐ ์ฒ˜๋ฆฌ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 3XX โ€” ์ด ์ฝ”๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž‘์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ URI์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์š”์ฒญ์„ ํ•ด์•ผ ํ•จ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  • 4XX โ€” ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ์ž˜๋ชป ๊ตฌ์„ฑ๋œ ์š”์ฒญ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜ ์•Œ๋ ค์ง„ "404 Not Found" ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
  • 5XX โ€” ์„œ๋ฒ„ ์˜ค๋ฅ˜. ์ด ์ฝ”๋“œ๋Š” ์„œ๋ฒ„๊ฐ€ ์ž‘์—… ์‹คํŒจ์— ๋Œ€ํ•œ ์ฑ…์ž„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
REST ๊ฐœ์š”. 3๋ถ€: Spring Boot์—์„œ RESTful ์„œ๋น„์Šค ๊ตฌ์ถ•
์ฝ”๋ฉ˜ํŠธ
  • ์ธ๊ธฐ
  • ์‹ ๊ทœ
  • ์ด์ „
์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
์ด ํŽ˜์ด์ง€์—๋Š” ์•„์ง ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค