2022๋…„ 10์›” 14์ผยท7๋ถ„ ์ฝ๊ธฐ

์ฃผ์š” REST API ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋ฐ ๋‹ต๋ณ€

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๋ฉด์ ‘์—์„œ ์ด๊ธธ ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ž์ฃผ ๋ฌป๋Š” REST API ๋ฉด์ ‘ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” REST API ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋ฐ ๋‹ต๋ณ€

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

RESTful API ๊ด€๋ จ ๋ฉด์ ‘ ์งˆ๋ฌธ์€ ์–ด๋–ป๊ฒŒ ์ค€๋น„ํ•˜๋‚˜์š”?

REST API ์ธํ„ฐ๋ทฐ ์ค‘ RESTful ์›น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•œ REST API ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ๊ณผ Spring MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ JAX-RS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ RESTful ์›น ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ์•„๋ž˜ ์„น์…˜์—์„œ ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์ธํ„ฐ๋ทฐ์— ์•‰๊ฑฐ๋‚˜ ์ธํ„ฐ๋ทฐ๋ฅผ ์˜ˆ์•ฝํ•˜๊ธฐ ์ „์— ์–ธ๊ธ‰๋œ ๋ชจ๋“  REST API ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

REST ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Representational State Transfer๋ฅผ ์„ค๋ช…ํ•˜๋Š” REST๋Š” HTTP ํ”„๋กœํ† ์ฝœ์— ์„ค์ •๋œ ์›น์‚ฌ์ดํŠธ ์•ฑ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. REST๋Š” ์›น์‚ฌ์ดํŠธ ๊ด€๋ จ ์œ ์šฉ์„ฑ์ด ๋ฏฟ๊ธฐ ์œ„ํ•ด ์ฒจ๋ถ€ํ•ด์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ ์‚ฌํ•ญ์€ ์ œ์ถœ๋ฌผ์„ ๊ฐ€์ƒ์œผ๋กœ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ๊ฐ„์— ํ‘œ์ค€ํ™”๋œ HTTP ๋ฐฉ๋ฒ•์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

REST API๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

RESTful API๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  REST์— ์—ฐ๊ฒฐ๋˜๋Š” API๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” REST API์—์„œ ๋ฆฌ์†Œ์Šค๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ ์ •ํ™•ํ•œ ํ‘œ์ค€ ์ƒ์ˆ˜ ๋‹จ์œ„(URI)์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. Twitter API๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์„ธ์Šคํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋กœ ํŠธ์œ—์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Twitter API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” ์‰ฝ๊ฒŒ ํŠธ์œ—์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

REST์˜ ์›์น™์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„๋Š” ์†Œ๋น„์ž์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ „์†กํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ จ์˜ ์‘๋‹ต์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์„œ๋กœ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ด๋Ÿฌํ•œ ๋ช…ํ™•ํ•œ ๋น„์ „์„ ํ†ตํ•ด ๋‘ ์„ธ๋ ฅ์ด ์„œ๋กœ์˜ ๋„์›€ ์—†์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ„์ธตํ™” ์‹œ์Šคํ…œ

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

๊ท ์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋ชจ๋“  ํ†ต์‹ ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ† ์ฝœ์€ HTTP REST์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ผํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์ผ๋œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ†ตํ•ฉ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด๊ตญ์ ์ž

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

์บ์‹œ ๊ฐ€๋Šฅ

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

์ฃผ๋ฌธํ˜• ์ฝ”๋“œ

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

AJAX์™€ REST์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

AJAX์™€ REST์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„์•ฝ์Šค****์‰ฌ๋‹ค XMLHttpRequest ๊ฐ์ฒด๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด Ajax์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JavaScript ์˜ ์ฝ”๋“œ๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋‹ต๋ณ€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ํ™œ์šฉ์€ URI ๊ตฌ์กฐ ๋ฐ ์š”์ฒญ/์‘๋‹ต ํŒจํ„ด์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. REST์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Ajax๋Š” ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋™์  ์—…๋ฐ์ดํŠธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ธฐ์ˆ  ๊ทธ๋ฃน์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” REST ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ajax๋Š” ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. REST๋Š” ์„œ๋ฒ„์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ํ†ต์‹ ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

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

  • ํด๋ผ์ด์–ธํŠธ

๋‹ค์–‘ํ•œ ์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  • ID ๊ณต๊ธ‰์ž

์‚ฌ์šฉ์ž ๋˜๋Š” ๊ณ ๊ฐ์˜ ์‹ ์›์„ ํ™•์ธํ•˜๊ณ  ๋ณด์•ˆ ํ† ํฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • API ๊ฒŒ์ดํŠธ์›จ์ด

ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ API ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • ์ •์  ์ฝ˜ํ…์ธ 

์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์ž๋ฃŒ๋Š” ์ •์  ์ฝ˜ํ…์ธ ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌ

์žฅ์• ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์— ์„œ๋น„์Šค ๊ท ํ˜•์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋น„์Šค ๋ฐœ๊ฒฌ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹  ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ

ํ”„๋ก์‹œ ์„œ๋ฒ„ ๋ฐ ๊ด€๋ จ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค.

  • ์›๊ฒฉ ์„œ๋น„์Šค

IT ์žฅ์น˜ ๋„คํŠธ์›Œํฌ์— ์ €์žฅ๋œ ์ •๋ณด๋Š” ์›๊ฒฉ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ์›๊ฒฉ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

REST์—์„œ ์ง€์›ํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

API ๋ณด์•ˆ ๊ฐ•ํ™”
๋‚ด์žฅ ์ธ์ฆ ๋ชจ๋“ˆ๋กœ ์‹ค์ œ ํ™˜๊ฒฝ์— ๋งž๋Š” REST ์„œ๋น„์Šค ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์„ธ์š”.
์ธ์ฆ ์ถ”๊ฐ€

REST HTTP ์ง€์› ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • GET - ์›น์‚ฌ์ดํŠธ ๋ฐ API์—์„œ ๊ฐ€์žฅ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ธ GET์€ ํŠน์ • ๋ฐ์ดํ„ฐ ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • POST - POST ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ API ์„œ๋ฒ„๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด HTTP ์š”์ฒญ ๋ณธ๋ฌธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • PUT - ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด API์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • DELETE - ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • URL์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ต์…˜ - ์ง€์›๋˜๋Š” ๊ธฐ์ˆ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

HEAD - ์š”์ฒญ URL์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ธฐ๋ก์˜ ๊ด€์ ์—์„œ ์ƒํ™ฉ์„ ์‚ดํŽด๋ณด์ž. ์ง์› ๋ฒˆํ˜ธ๊ฐ€ 1์ธ ์ž‘์—…์ž์— ๋Œ€ํ•œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ™œ๋™์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

POST - ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ง์› 1์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ ์ค‘์ด๋ฏ€๋กœ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

GET - RESTful ์›น API๋ฅผ ํ†ตํ•ด ์ง์› ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ์ง์› ๋ฒˆํ˜ธ๋Š” 1์ž…๋‹ˆ๋‹ค.

PUT - RESTful ์›น API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PUT์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง์› 1๋ฒˆ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ์ง์› ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

DELETE - ์‚ฌ์›๋ฒˆํ˜ธ๊ฐ€ 1์ธ ์‚ฌ์›์˜ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

PUT๊ณผ POST์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

PUT๊ณผ Post์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • PUT - ์ œ๊ณต๋œ(๊ท ์ผํ•œ ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž) URI์—์„œ ํŒŒ์ผ ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ •ํ™•ํ•˜๊ณ  ๊ตฌ์ฒด์ ์œผ๋กœ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. PUT์€ ๊ธฐ์กด ํŒŒ์ผ์ด URI(Uniform Resource Identifier)์— ์žˆ๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. PUT๋Š” ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ PUT์€ ๋ฉฑ๋“ฑ์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์ด ์‚ฌ์šฉ๋˜๋Š” ๋นˆ๋„์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • POST - ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•œ ๊ท ์ผ ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž(URI)๋กœ ๋ณด๋‚ด๊ณ  ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ์ˆ˜์š”๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆœ๊ฐ„ ์›น์‚ฌ์ดํŠธ ์„œ๋ฒ„๋Š” ์„ ํƒํ•œ ํŒŒ์ผ์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ POST ์ „๋žต์€ ๋ฉฑ๋“ฑ์„ฑ์ด ์•„๋‹ˆ๋ฏ€๋กœ ๋‘ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉํ•˜๋ฉด ์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ์ด ์žฌ๊ฐœ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋†€๋ฆฌ์‹ SOA์™€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ชจ๋†€๋ฆฌ์‹ ์•ฑ์€ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋งค์šฐ ๋А๋ฆฌ๊ณ  ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋” ์ž‘๊ณ  ์ตœ์†Œํ•œ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์„œ๋น„์Šค๊ฐ€ SOA๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๊ฐœ๋ฐœ๋„ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋Š” ๋งค์šฐ ์ž‘๊ณ  ๋А์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์„œ๋น„์Šค๋กœ ๋น ๋ฅธ ๋ฐ˜๋ณต ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

URI ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

URI(Uniform Resource Identifier)๋ฅผ URI๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. REST์˜ URI๋Š” ์›น ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฆฌ์†Œ์Šค์—๋Š” HTTP ์š”์ฒญ์—์„œ ์‚ฌ์šฉ๋  ๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณ ์œ ํ•œ URI๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์†Œ ์ง€์ •์€ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๋‚ด๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

URI ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<ํ”„๋กœํ† ์ฝœ>://<์„œ๋น„์Šค ์ด๋ฆ„>/<๋ฆฌ์†Œ์Šค ์œ ํ˜•>/<๋ฆฌ์†Œ์Šค ID>

URI์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. URL - ํ•ด๋‹น ์œ„์น˜์—์„œ ๋ฆฌ์†Œ์Šค ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ์ •๋ณด๋Š” Uniform Resource Locator์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

URL์—๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„(sampleServer.com) ๋ฐ ์ฝ˜ํ…์ธ  ๊ฒฝ๋กœ(/samplePage.html)์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ”„๋กœํ† ์ฝœ(์˜ˆ: FTP, HTTP ๋“ฑ)๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ๊ธฐ์ค€์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

2. URN - ๊ณ ์œ ํ•˜๊ณ  ๋‚ด๊ตฌ์„ฑ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ท ์ผํ•œ ์ž์› ์ด๋ฆ„์ด ์ž์›์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐ๋„ท์—์„œ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋Š” URN์— ์˜ํ•ด ๋ฐ˜๋“œ์‹œ ์ง€์ •๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•  ๋•Œ ๋‹ค๋ฅธ ํŒŒ์„œ๊ฐ€ ์‚ฌ์šฉํ•  ๋ชจ๋ธ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

URN์ด ๋ฌธ์„œ๋ฅผ ์‹๋ณ„ํ•  ๋•Œ๋งˆ๋‹ค "resolver"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ URL๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RESTful ์›น ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

API์™€ ์›น ์•ฑ ์—ฐ๋™
๊ฐ„๋‹จํ•œ ์›น UI๋ฅผ ๋งŒ๋“ค์–ด ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ ์•ฑ์ฒ˜๋Ÿผ REST API ํ๋ฆ„์„ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.
ํฌํ„ธ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ๊ธฐ๋Šฅ์€ ๋ชจ๋“  RESTful ์›น ์„œ๋น„์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ†ต์‹  ๋ชจ๋ธ์€ ์„œ๋น„์Šค์˜ ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.
  • ์ด ์„œ๋น„์Šค๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ/๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ธฐํƒ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • "๋ฉ”์‹œ์ง•"์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค๋Š” URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌด๊ตญ์  ๊ฐœ๋…์„ ์ค€์ˆ˜ํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์™„์ „ํ•œ ํ™•์‹ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์œ ํ˜•์˜ ๋ฐ˜๋ณต ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ฒ„ ํ˜ธ์ถœ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋Š” ์บ์‹ฑ ๊ฐœ๋…๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋Š” SOAP ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP ์ƒํƒœ ์ฝ”๋“œ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

HTTP ์ƒํƒœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ‘œ์ค€ ์ฝ”๋“œ๋Š” ์„ค์ •๋œ ์„œ๋ฒ„ ์ž‘์—… ์™„๋ฃŒ ์ƒํƒœ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, HTTP ์ƒํƒœ 404๋Š” ์„œ๋ฒ„์— ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๊ทธ ์˜๋ฏธ๋ฅผ ์ดํ•ดํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • 200 - ์ข‹์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • 201 - POST ๋˜๋Š” PUT ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์‘๋‹ต ์ฝ”๋“œ๋Š” 201 - CREATED์ž…๋‹ˆ๋‹ค. ์œ„์น˜ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ URL์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • 304 - ์กฐ๊ฑด๋ถ€ GET ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์ƒํƒœ ์ฝ”๋“œ 304 NOT MODIFIED๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์‘๋‹ต ๊ธฐ๊ด€์€ ๋น„์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ ์งœ, ์œ„์น˜ ๋ฐ ๊ธฐํƒ€ ์ •๋ณด๋Š” ํ—ค๋”์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • 400 - BAD REQUEST๋Š” ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹ค์ˆ˜์™€ ๊ฐ™์€ ์ž˜๋ชป๋œ ์ž…๋ ฅ์ด ์ œ๊ณต๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 401 - FORBIDDEN์€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ์—†์ด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์‚ญ์ œํ•˜๋Š” ๋“ฑ ์‚ฌ์šฉ ์ค‘์ธ ๋ฐฉ๋ฒ•์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 404 - ์˜ค๋ฅ˜๋Š” ์š”์ฒญํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 409 - CONFLICTS ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ค‘๋ณต ํ•ญ๋ชฉ ์‚ฝ์ž…๊ณผ ๊ฐ™์€ ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • 500 - ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์„œ๋ฒ„์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

RESTful ์›น ์„œ๋น„์Šค์˜ ๋‹จ์ ์„ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

RESTful ์›น ์„œ๋น„์Šค์˜ ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ๋ฌด๊ตญ์ ์ž์˜ ๊ฐœ๋…์„ ๊ณ ์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— RESTful ์›น ์„œ๋น„์Šค์˜ ์„ธ์…˜์„ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๋ฐ ๋ณดํ˜ธ ์ œํ•œ์€ REST์— ํ•„์ˆ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ”„๋กœํ† ์ฝœ์€ ์•ˆ์ „ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด SSL/TLS ์ธ์ฆ๊ณผ ๊ฐ™์ด ์„ ํƒํ•  ๋ณดํ˜ธ ๋ฐ ์•ˆ์ „ ํ‘œ์ค€์„ ๊ฒฐ์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

SOAP์™€ REST๋ฅผ ๊ตฌ๋ณ„ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

SOAP์™€ REST์˜ ์ฐจ์ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น„๋ˆ„****์‰ฌ๋‹ค SOAP๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์€ ์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. REST๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. SOAP์—์„œ ์ œ๊ณตํ•˜๋Š” ์ง€์นจ์€ ๋‹ค์Œ์„ ์—„๊ฒฉํžˆ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. REST๋Š” ๊ธฐ์ค€์„ ์„ค๋ช…ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ์ค€์ˆ˜ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. SOAP ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ ์—์„œ ์—„๊ฒฉํ•œ ๊ณ„์•ฝ์„ ๊ฐ€์ง„ ๋ฐ์Šคํฌํ†ฑ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์ ํ•ฉ๋‹ˆ๋‹ค. REST ํด๋ผ์ด์–ธํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €๋ณด๋‹ค ์ ์‘๋ ฅ์ด ๋†’์œผ๋ฉฐ ํ•„์š”ํ•œ ํ†ต์‹  ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ํ•œ ์„œ๋ฒ„์˜ ์„ค๊ณ„์™€ ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค. SOAP๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ XML ์ „์†ก๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. XML, JSON, MIME, Text ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ REST์—์„œ ์ œ๊ณต SOAP ์ฝ๊ธฐ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. REST ์ฝ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค๋Š” SOAP์—์„œ ๋ฆฌ์†Œ์Šค ๋…ผ๋ฆฌ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๋กœ์ง์€ URI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ REST๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ์ถœ๋ฉ๋‹ˆ๋‹ค. SOAP๊ฐ€ ๋А๋ฆผ REST๊ฐ€ ๋” ๋น ๋ฆ„ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— SOAP๋Š” ์ž์ฒด ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. REST๋Š” ๊ตฌํ˜„ ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ณด์•ˆ ์˜ˆ๋ฐฉ ์กฐ์น˜๋งŒ ์ทจํ•ฉ๋‹ˆ๋‹ค. SOAP๋Š” ์ž์ฃผ ์„ ํƒ๋˜์ง€ ์•Š์ง€๋งŒ Stateful ๋ฐ์ดํ„ฐ ์ „์†ก๊ณผ ๋” ๋†’์€ ์•ˆ์ •์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”์ฆ˜ REST๋Š” ๋” ๋งŽ์€ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž์ฃผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

HTTP ์‘๋‹ต์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

REST ๋ฐฉ์‹์œผ๋กœ ๋ฆฌ์†Œ์Šค ๋ชจ๋ธ๋ง
PostgreSQL ํ…Œ์ด๋ธ”์„ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์Šคํ‚ค๋งˆ์—์„œ ํ”„๋กœ๋•์…˜ ๋ฐฑ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
๋ฐฑ์—”๋“œ ์ƒ์„ฑ

HTTP ์‘๋‹ต์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

WebSocket๊ณผ REST์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ์•„๋ž˜์— ์–ธ๊ธ‰๋œ WebSocket ๊ณผ REST ๊ฐ„์˜ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค.

REST๋Š” CRUD ์ž‘์—…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฐ˜๋ฉด WebSocket์€ ๊ธฐ๋ณธ ์ „์†ก ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ์†Œ์ผ“ ๋ฐ ํฌํŠธ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ €์ˆ˜์ค€ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

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

์ˆ˜ํ‰์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” HTTP ๊ธฐ๋ฐ˜ REST์™€ ๋‹ฌ๋ฆฌ WebSocket ์—ฐ๊ฒฐ์€ ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์ˆ˜์ง์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. REST ๊ธฐ๋ฐ˜ ํ†ต์‹ ์€ ๋น„๊ต์  ๋น„์‹ธ์ง€๋งŒ WebSocket ํ†ต์‹ ์€ ์ €๋ ดํ•ฉ๋‹ˆ๋‹ค.

REST์—์„œ TLS(์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ)๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, ์˜ˆ! REST์˜ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ํ†ต์‹ ์€ TLS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋˜๋ฉฐ, ์ด๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์„œ๋ฒ„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SSL(Secure Socket Layer)์„ ๋Œ€์ฒดํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ณด์•ˆ ํ†ต์‹  ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. HTTPS๋Š” SSL(Secure Socket Layer) ๋ฐ TLS(Transport Layer Security)์™€ ์ž˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ RESTful ์›น ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ REST๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์˜ ์ธก๋ฉด์— ํฌํ•จ๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•ˆ์ „ ๋ณดํ˜ธ๋Š” REST ํ”„๋กœํ† ์ฝœ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

POST ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ž…๋‹ˆ๊นŒ?

REST๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํƒ์ƒ‰
API๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ถ„๋ฆฌ๋œ ์„œ๋น„์Šค๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์†Œ๊ทœ๋ชจ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์Šคํƒ€์ผ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜์„ธ์š”.
ํ”„๋กœ์ ํŠธ ์‹œ์ž‘

ํฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ํฌ๊ธฐ๋Š” ์ด๋ก ์ ์œผ๋กœ ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ํฐ ํŽ˜์ด๋กœ๋“œ๋Š” ๋” ๋งŽ์€ ๋Œ€์—ญํญ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์„œ๋ฒ„์˜ ์‘๋‹ต์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

JAX-RS API์— ์žˆ๋Š” ์ฃผ์š” ์ฃผ์„ ๋‚˜์—ด

  • ๊ฒฝ๋กœ - REST ๋ฆฌ์†Œ์Šค์˜ ์ƒ๋Œ€ URI(Uniform Resource Identifier) ๊ฒฝ๋กœ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • GET - ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ์ง€์ •์ž๋Š” HTTP GET์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. GET ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • POST - ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ์ง€์ •์ž๋Š” HTTP POST์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. POST ๋ฌธ์˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • PUT - ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ์ง€์ •์ž๋Š” HTTP PUT ์š”์ฒญ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. PUT ๋ฌธ์˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • DELETE - HTTP DELETE์— ์‚ฌ์šฉ๋˜๋Š” ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์ •์ž๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. DELETE ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • HEAD - ์š”์ฒญ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด ์ง€์ •์ž๋Š” HTTP HEAD์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. HEAD ๋ฌธ์˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • PathParam - ๊ฐœ๋ฐœ์ž๋Š” ์ด URI(Uniform Resource Identifier) ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์› ํด๋ž˜์Šค/๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ URI์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • QueryParam - ๋ฆฌ์†Œ์Šค ํด๋ž˜์Šค/๋ฉ”์†Œ๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด URI(Uniform Resource Identifier) ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ URI(Uniform Resource Identifier)์—์„œ ์ถ”์ถœํ•œ ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ƒ์„ฑ - ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํšŒ์‹ ์œผ๋กœ ์ „์†ก๋˜๋Š” MIME ๋ฆฌ์†Œ์Šค ํ”„๋ ˆ์  ํ…Œ์ด์…˜์ด ์—ฌ๊ธฐ์— ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • ์†Œ๋น„ - ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ฐ›์„ ๋•Œ ์„œ๋ฒ„๊ฐ€ ์ˆ˜๋ฝํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•  MIME ๋ฆฌ์†Œ์Šค ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Spring์—์„œ RestTemplate ์ •์˜

RESTful ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ ํด๋ž˜์Šค๋ฅผ RestTemplate์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. REST ์ œํ•œ์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ JdbcTemplate ๋ฐ HibernateTemplate๊ณผ ๊ฐ™์ด Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ ์„น์…˜๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. RestTemplate์€ (Uniform Resource Identifier) URI ํ…œํ”Œ๋ฆฟ, URI(Uniform Resource Identifier) ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜, ์š”์ฒญ/์‘๋‹ต ์ข…๋ฅ˜, ์š”์ฒญ ๊ฐ์ฒด ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ฉ”์„œ๋“œ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. GET๊ณผ ๊ฐ™์€ HTTP ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. , POST, PUT ๋“ฑ

Spring 4.3์˜ ์ด ์„น์…˜์€ @GetMapping, PutMapping, @PostMapping ๋“ฑ๊ณผ ๊ฐ™์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ „์— Spring์€ ํ™œ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด @RequestMapping ํ•ด์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@RequestMapping์˜ ์šฉ๋„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  • ์š”์ฒญ์€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ฒ˜๋ฆฌ๊ธฐ ๋ฉ”์„œ๋“œ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

  • Dispatcher Servlet์€ Spring์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ผ์šฐํŒ…์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•  ๋•Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋ชจ๋‘ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. @Controller ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Dispatcher Servlet์— ์˜ํ•ด ์Šค์บ”๋ฉ๋‹ˆ๋‹ค.

    ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ๋ฐ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ •์˜๋œ @RequestMapping ์ฃผ์„์€ ์š”์ฒญ ๋ผ์šฐํŒ… ํ”„๋กœ์„ธ์Šค์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์›น API ๊ฐœ๋ฐœ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ ๋˜๋Š” API ๋‚˜์—ด

์ฝ”๋“œ๋ฒ ์ด์Šค ์ง์ ‘ ์†Œ์œ 
์™„์ „ํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ๊ฐ€๋Šฅํ•œ ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
์†Œ์Šค ๋‚ด๋ณด๋‚ด๊ธฐ

Postman, Swagger ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋„๊ตฌ์˜ ๋„์›€์œผ๋กœ RESTful ์›น ์„œ๋น„์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Postman์—๋Š” ๋์ ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , JSON ๋˜๋Š” XML๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‘๋‹ต์„ ํ‘œ์‹œํ•˜๊ณ , ์‘๋‹ต ํ—ค๋”๋Š” ๋ฌผ๋ก  ํ—ค๋” ๋ฐ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ถ„์„ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Postman๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Swagger๋Š” ๋์  ์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Jmeter์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API์˜ ์„ฑ๋Šฅ๊ณผ ๋ถ€ํ•˜๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹ฑ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์„œ๋ฒ„ ์‘๋‹ต์ด ์บ์‹œ๋˜๋ฉด ๋™์ผํ•œ ์‘๋‹ต์„ ๋‹ค์‹œ ์ƒ์„ฑํ•  ํ•„์š” ์—†์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์‚ฌ๋ณธ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์ˆ ์€ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ๋œ์–ด์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์‘๋‹ต์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž ์‹œ ๋™์•ˆ๋งŒ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹ฑ ์ ˆ์ฐจ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ์†Œ์Šค์˜ ํ—ค๋”์™€ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ด ์•„๋ž˜์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์‹  ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์—…๋ฐ์ดํŠธ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„
  • ์บ์‹œ ์ œ์–ด์šฉ ํ—ค๋”
  • ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž‘๋™์„ ์ค‘์ง€ํ•˜๋Š” ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„
  • ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜จ ์‹œ์ ์˜ ์‹œ์ž‘์ ์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๊ฐ„

REST API๋ฅผ ๋ฐฐ์šฐ๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ๋ฆฌ์†Œ์Šค๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์›น์‚ฌ์ดํŠธ ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์„ ์œ„ํ•œ REST API๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ 5๊ฐœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

RESTful ์›น ์„œ๋น„์Šค

API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด Leonard Richardson์ด ์ž‘์„ฑํ•œ RESTful Web Services wonder๋ผ๋Š” ์ด ๊ฐ€์ด๋“œ๋ถ์ด ํฐ ์ž์‚ฐ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์ดˆ๋ณด์ž์ด๊ณ  REST(Representational State Transfer) ์›น ์‚ฌ์ดํŠธ ์„œ๋น„์Šค์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋Š” REST(Representational State Transfer) ๊ธฐ๋Šฅ๊ณผ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ํ•„์ˆ˜ ์›น ๊ด€๋ จ ์„œ๋น„์Šค๋ฅผ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ RESTful API์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋„ ๊ตฌ์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

REST API ํŠœํ† ๋ฆฌ์–ผ

REST API Tutorial์€ ์ฑ…์„ ์ฝ๊ฑฐ๋‚˜ ์ฑ…์„ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹Œ ๊ฒฝ์šฐ REST(Representational State Transfer)๋ฅผ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ์˜จ๋ผ์ธ ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋Š” ๋ชจ๋“  ๊ธฐ๋ณธ ์ธก๋ฉด์„ ๋‹ค๋ฃจ๋Š” REST๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์€ REST(Representational State Transfer)์˜ ๋„์ž…์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ HTTP ๊ด€๋ จ ์ „๋žต ๋ฐ ์ง€์‹ ๋“ฑ์— ๊ด€ํ•œ ์˜ˆ์ œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

REST API ๋””์ž์ธ ๋ฃฐ๋ถ

Mark Masse ์ฑ…์˜ ์ €์ž๊ฐ€ REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋œ ๊ฒฝํ—˜๊ณผ ์ „๋žต์„ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฑ…์€ REST(Representational State Transfer) ์ง€์นจ์„ ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋ฆฌ์†Œ์Šค ์ฑ…์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค์—์„œ ๊ทธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ URI๋ฅผ ๊ณ ์•ˆํ•˜๋Š” ๋ฐฉ๋ฒ•, HTTP ํ—ค๋”๋ฅผ ํ†ตํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋””์–ด ์œ ํ˜•์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ HTTP์˜ ์ œ์ถœ ๋ฐฉ๋ฒ• ๋ฐ ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ํ˜์‹ ์„ ์ฐธ์—ฌ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

API ๊ฐœ๋ฐœ์ž ์ฃผ๊ฐ„ ๋‰ด์Šค๋ ˆํ„ฐ

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

์•ˆ์‹ฌ

์ด๊ฒƒ์€ Java๋ผ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์šด ์ข‹์€ ์˜คํ”ˆ ์†Œ์Šค REST ํ…Œ์ŠคํŠธ ๋งค์ฒด์ž…๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค๋Š” RESTful API ํ”„๋กœ์„ธ์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. REST-Assured๋Š” ๋˜ํ•œ ๋ณต์žกํ•œ ๋ฐ˜์‘์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ํ•„์š”์„ฑ์„ ์—†์• ๊ณ  BDD ๊ตฌ๋ฌธ์„ ๋•์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ

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

๋˜ํ•œ ์›น์‚ฌ์ดํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ AppMaster๊ฐ€ ์ตœ๊ณ ์˜ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์—†๋Š” ํ”Œ๋žซํผ ์ž…๋‹ˆ๋‹ค.umi-doebnigga" data-mce-href="https://appmaster.io/ko/blog/ggeuleoseo-nohgiga-siljero-mueosimyeo-weonhaneun-sayongja-jijeong-sopeuteweoreul-eodneun-de-eoddeohge-doumi-doebnigga"> ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹์ด๋ฉฐ ์ด์ „์˜ ์ฝ”๋”ฉ ๊ฒฝํ—˜์ด๋‚˜ ์ง€์‹์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์‰ฌ์šด ์‹œ์ž‘
๋ฉ‹์ง„๋งŒ๋“ค๊ธฐ

๋ฌด๋ฃŒ ์š”๊ธˆ์ œ๋กœ AppMaster๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.
์ค€๋น„๊ฐ€ ๋˜๋ฉด ์ ์ ˆํ•œ ๊ตฌ๋…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋‹ค
์ฃผ์š” REST API ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋ฐ ๋‹ต๋ณ€ | AppMaster