SpringFramework 08. REST API - swkim0128/PARA GitHub Wiki


type: Spring archive: false

REST(Representational State Transfer) API

OPEN API?? (Application Programming Interface)


OPEN API๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐฉ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์˜ interface

naver, kakao ๋“ฑ ํฌํ„ธ ์„œ๋น„์Šค ์‚ฌ์ดํŠธ๋‚˜ ํ†ต๊ณ„์ฒญ, ๊ธฐ์ƒ์ฒญ, ์šฐ์ฒด๊ตญ ๋“ฑ๊ณผ ๊ฐ™์€ ๊ด€๊ณต์„œ, ๊ณต๊ณต ๋ฐ์ดํ„ฐ ํฌํ„ธ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก OPEN API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

OPEN API์™€ ํ•จ๊ป˜ ๊ฑฐ๋ก ๋˜๋Š” ๊ธฐ์ˆ ์ด REST์ด๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ OPEN API๋Š” REST๋ฐฉ์‹์œผ๋กœ ์ง€์›.

REST(Representational State Transfer)


2000๋…„๋„ ๋กœ์ด ํ•„๋”ฉ(Roy Fielding)์˜ ๋ฐ•์‚ฌํ•™์œ„ ๋…ผ๋ฌธ์— ์ตœ์ดˆ๋กœ ์†Œ๊ฐœ

REST๋Š” Representational State Transfer์˜ ์•ฝ์–ด๋กœ ํ•˜๋‚˜์˜ URI๋Š” ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๋ฆฌ์†Œ์Šค (Resource)๋ฅผ ๋Œ€ํ‘œํ•œ๋„๋ก ์„ค๊ณ„๋œ๋‹ค๋Š” ๊ฐœ๋…์— ์ „์†ก๋ฐ•์‹์„ ๊ฒฐํ•ฉํ•ด์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ง€์ •ํ•œ๋‹ค.

!Untitled 44.png

์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜(์„ค๊ณ„๊ตฌ์กฐ)๋กœ์จ REST๋ฅผ ๋ฐœํ‘œ

HTTP URI๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•  ์ž์›(Resource)๋ฅผ ๋ช…์‹œํ•˜๊ณ , HTTP Method(GET, POST, PUT, DELETE)์„ ํ†ตํ•ด ํ•ด๋‹น ์ž์›(Resource)๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ์‹์˜ ์•„ํ‚คํ…์ฒ˜

REST ๊ตฌ์„ฑ


  • ์ž์› (Resource) - URI
  • ํ–‰์œ„ (verb) - HTTP Method
  • ํ‘œํ˜„ (Representations)

์ž˜ ํ‘œํ˜„๋œ HTTP URI๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  HTTP method๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ์ •์˜ํ•œ๋‹ค.

๋ฆฌ์†Œ์Šค๋Š” JSON, XML๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์–ธ์–ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์กด Service์™€ REST Service


  • ๊ธฐ์กด Service : ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„ ๊ฐ€๊ณต๋œ data๋ฅผ ์ด์šฉํ•˜์—ฌ ํŠน์ • ํ”Œ๋žซํผ์— ์ ํ•ฉํ•œ ํ˜•ํƒœ์˜ View๋กœ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜
  • REST Service : data ์ฒ˜๋ฆฌ๋งŒ ํ•œ๋‹ค๊ฑฐ๋‚˜, ์ฒ˜๋ฆฌ ํ›„ ๋ฐ˜ํ™˜๋  data๊ฐ€ ์žˆ๋‹ค๋ฉด JSON์ด๋‚˜ XML ํ˜•์‹์œผ๋กœ ์ „๋‹ฌ. View์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค. >> ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Open Api์—์„œ ๋งŽ์ด ์‚ฌ์šฉ

!Untitled 1 22.png

REST


๊ธฐ์กด์˜ ์ „์†ก๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„๋Š” ์š”์ฒญ์œผ๋กœ ๋ฐ›์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•œ๋‹ค.

๊ธฐ์กด์˜ GET/POST ์™ธ์— PUT, DELETE ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ CRUD ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

HTTP URI์„ ํ†ตํ•ด ์ œ์–ดํ•  ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP METHOD(GET/POST/PUT/DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›(Resource)๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ์‹์˜ Architecture์ด๋‹ค.

๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ๋”ฑ ์ •ํ•ด์ง„ ํ‘œ์ค€์ด ์—†์–ด '๋‹ค๋“ค ์ด๋ ‡๊ฒŒ ์“ฐ๋”๋ผ' ์ •๋„์˜ ์•”๋ฌต์ ์ธ ํ‘œ์ค€๋งŒ ์ •ํ•ด์ ธ ์žˆ๋‹ค.

  • ํ•˜์ดํ”ˆ(-)์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์–ธ๋”๋ฐ”(_)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ์€ ํ•˜์ง€ ์•Š๋Š”๋‹ค.(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ)
  • URI ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ(/)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์Šฌ๋ž˜์‹œ(/)๋กœ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ํ™•์žฅ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ง์ ‘ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
  • URI๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ธฐ์กด์˜ ์›น ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ REST API ๋ฐฉ์‹์˜ ์ฐจ์ด์ 

!Untitled 2 21.png

๊ธฐ์กด์˜ ๋ธ”๋กœ๊ทธ๋“ฑ์€ GET๊ณผ POST ๋งŒ์œผ๋กœ ์ž์›์— ๋Œ€ํ•œ CRUD๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, URI๋Š” ์•ก์…˜์„ ๋‚˜ํƒ€๋ƒˆ๋‹ค.

REST๋กœ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ 4๊ฐ€์ง€ method๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ CRUD๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, URI๋Š” ์ œ์–ดํ•˜๋ ค๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

REST API ์„ค์ •


REST ๊ด€๋ จ Annotation


!Untitled 4 16.png

REST API ์˜ˆ


!Untitled 7 9.png

!Untitled 8 7.png

!Untitled 9 7.png

!Untitled 10 6.png

!Untitled 11 5.png

!Untitled 12 5.png

!Untitled 13 5.png

!Untitled 14 5.png

!Untitled 15 4.png

!Untitled 16 4.png

โš ๏ธ **GitHub.com Fallback** โš ๏ธ