์Šคํ”„๋ง

๊ธฐ์ดˆ ์ง€์‹ - 2 REST API

KIMHYEYUN 2022. 9. 1. 18:22
๋ฐ˜์‘ํ˜•

REST API

๋Œ€์ค‘์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค
์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๊ณ  ์ž์›์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ

REST ๋ž€ ?

"Representational State Transfer"์˜ ์•ฝ์ž๋กœ, ์›”๋“œ ์™€์ด๋“œ ์›น(WWW)๊ณผ ๊ฐ™์€ ๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ ํ˜•์‹
์ฃผ๊ณ  ๋ฐ›๋Š” ์ž์›(Resource)์— ์ด๋ฆ„์„ ๊ทœ์ •ํ•˜๊ณ  URI์— ๋ช…์‹œํ•ด HTTP ๋ฉ”์„œ๋“œ (GET, POST, PUT, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธ

REST API ๋ž€ ?

API : Application Programming Interface, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธ
- API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
- โœ… ์ฆ‰, REST API๋Š” REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ / ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ
- REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ RESTfulํ•˜๋‹ค ๋ผ๊ณ  ํ‘œํ˜„

REST์˜ ํŠน์ง•

  • ์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค
    • ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธ
    • โœ… ์ฆ‰, REST ์„œ๋ฒ„๋Š” HTTP ํ‘œ์ค€ ์ „์†ก ๊ทœ์•ฝ์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์กŒ๋А๋ƒ์™€ ์ƒ๊ด€์—†์ด ํ”Œ๋žซํผ ๋ฐ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ํƒ€ ์–ธ์–ด, ํ”Œ๋žซํผ, ๊ธฐ์ˆ  ๋“ฑ๊ณผ ํ˜ธํ™˜ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ๋ฌด์ƒํƒœ์„ฑ(Stateless)

    • ์„œ๋ฒ„์— ์ƒํƒœ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ
    • ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์— ๋Œ€ํ•ด ์„ธ์…˜์ด๋‚˜ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Œ โ†’ ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋“  ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋“  ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌ
    • ์„œ๋ฒ„๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์˜ ์ž์œ ๋„๊ฐ€ ๋†’๊ณ  ์„ค๊ณ„๊ฐ€ ๋‹จ์ˆœํ•จ
  • ์บ์‹œ ๊ฐ€๋Šฅ์„ฑ

    • REST๋Š” HTTP ํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ HTTP์˜ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ์ด ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‘๋‹ต๊ณผ ์š”์ฒญ์ด ๋ชจ๋‘ ์บ์‹ฑ ๊ฐ€๋Šฅํ•œ์ง€(Cacheable) ๋ช…์‹œ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ์บ์‹œ์— ์ €์žฅํ•ด๋‘๊ณ  ๊ฐ™์€ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•จ
    • ์‚ฌ์šฉํ•˜๋ฉด, ์„œ๋ฒ„์˜ ํŠธ๋žœ์žญ์…˜ ๋ถ€ํ•˜๊ฐ€ ์ค„์–ด ํšจ์œจ์ ์ด๋ฉฐ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋จ
  • ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ

    • REST ์„œ๋ฒ„๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์˜ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Œ(Layered System)
    • ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋ฒ„์˜ ๋ณต์žก๋„์™€ ๊ด€๊ณ„์—†์ด ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๋Š” ํฌ์ธํŠธ๋งŒ ์•Œ๋ฉด ๋จ
  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ณ

    • REST ์„œ๋ฒ„๋Š” API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌํ•ด ์„ค๊ณ„ํ•จ
    • ์ด ๊ตฌ์„ฑ์€ ์„œ๋กœ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๋Š” ๊ธฐ๋Šฅ์„ ํ•จ

Rest์˜ URI ์„ค๊ณ„ ๊ทœ์น™

URI ๊ทœ์น™

  • URI์˜ ๋งˆ์ง€๋ง‰์—๋Š” '/'๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์–ธ๋”๋ฐ”(_)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ํ•˜์ดํ””(-)์„ ์ด์šฉ

  • URL์—๋Š” ํ–‰์œ„(๋™์‚ฌ)๊ฐ€ ์•„๋‹Œ ๊ฒฐ๊ณผ(๋ช…์‚ฌ)๋ฅผ ํฌํ•จ

  • URI๋Š” ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑ

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

    • HTTP์—์„œ ์ œ๊ณตํ•˜๋Š” Accept ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
728x90
๋ฐ˜์‘ํ˜•