Skip to content

Latest commit

ย 

History

History
122 lines (85 loc) ยท 6.31 KB

File metadata and controls

122 lines (85 loc) ยท 6.31 KB

REST

๐Ÿ’ฏ REST์˜ ์ •์˜

"REpresentational State Transfer" ์˜ ์•ฝ์ž๋กœ,

์ž์›์„ ์ด๋ฆ„(์ž์›์˜ ํ‘œํ˜„)์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ž์›์— ๋Œ€ํ•ด CRUD(Create, Read, Update, Delete) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด URI(Resource)๋กœ

GET, POST ๋“ฑ์˜ ๋ฐฉ์‹(Method)์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉฐ, ์š”์ฒญ์„ ์œ„ํ•œ ์ž์›์€ ํŠน์ •ํ•œ ํ˜•ํƒœ
(Representation of Resource)๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.

์ฆ‰,ย **์ž์›(resource)**์˜ย **ํ‘œํ˜„(representation)**์— ์˜ํ•œย ์ƒํƒœ ์ „๋‹ฌ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

  • ์ž์›ย :ย ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ ( ๋ฌธ์„œ, ๊ทธ๋ฆผ, ๋ฐ์ดํ„ฐ, ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด ์ž์ฒด ๋“ฑ )

  • ํ‘œํ˜„ :ย ๊ทธ ์ž์›์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„ ( DB์˜ ํ•™์ƒ ์ •๋ณด๊ฐ€ ์ž์›์ด๋ฉด, 'students'๋ฅผ ์ž์›์˜ ํ‘œํ˜„์œผ๋กœ ์ •ํ•จ )

  • ์ƒํƒœ ์ „๋‹ฌ :ย ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ๋˜๋Š” ์‹œ์ ์— ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ( JSON ํ˜น์€ XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์  )

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น์˜ ๊ธฐ์กด ๊ธฐ์ˆ ๊ณผ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ

  • ๋„คํŠธ์›Œํฌ ์ƒ์—์„œย Client ์™€ Server ์‚ฌ์ด์˜ ํ†ต์‹  ๋ฐฉ์‹ย ์ค‘ ํ•˜๋‚˜



REST์˜ ๊ฐœ๋…

  • HTTP URI ๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT DELETE) ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • ์ฆ‰ REST๋Š” ์ž์› ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์„ค๊ณ„์˜ ์ค‘์‹ฌ์— Resource๊ฐ€ ์žˆ๊ณ  HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์•„ํ‚คํ…์ณ๋ฅผ ์˜๋ฏธ
    • ์›น ์‚ฌ์ดํŠธ์˜ ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ, DB ๋‚ด์šฉ ๋“ฑ์˜ ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID์ธ HTTP URI๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.
    • CRUD Operation
      • Create: ์ƒ์„ฑ(POST)
      • Read: ์กฐํšŒ(GET)
      • Update: ์ˆ˜์ •(PUT)
      • Delete: ์‚ญ์ œ(DELETE)
      • HEAD: header ์ •๋ณด ์กฐํšŒ(HEAD)
GET Read : ์ •๋ณด ์š”์ฒญ, URI๊ฐ€ ๊ฐ€์ง„ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค.
POST Create : ์ •๋ณด ์ž…๋ ฅ, ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค.
PUT Update : ์ •๋ณด ์—…๋ฐ์ดํŠธ, ์ฃผ๋กœ ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ)
PATCH Update : ์ •๋ณด ์—…๋ฐ์ดํŠธ, ์ฃผ๋กœ ๋‚ด์šฉ์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐ์ดํ„ฐ ์ผ๋ถ€๋งŒ ๋ฐ”๊ฟ€ ๋•Œ)
DELETE Delete : ์ •๋ณด ์‚ญ์ œ, (์•ˆ์ „์„ฑ ๋ฌธ์ œ๋กœ ๋Œ€๋ถ€๋ถ„ ์„œ๋ฒ„์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค.)



REST์˜ ํŠน์ง•

1.ย Server-Client (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ)

  • ์ž์›์ด ์žˆ๋Š” ์ชฝ์ด Server, ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ชฝ์ด Client๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
    • REST Server๋Š” API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ์„ ์ฑ…์ž„์ง€๊ณ ,
    • Client๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ context( ์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด ) ๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค.
    • ์—ญํ• ์„ ํ™•์‹คํžˆ ๊ตฌ๋ถ„์‹œํ‚ด์œผ๋กœ์จ ์„œ๋กœ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.

2.ย Stateless (๋ฌด์ƒํƒœ)

  • HTTP ํ”„๋กœํ† ์ฝœ์€ Stateless Protocol์ด๋ฏ€๋กœ REST ์—ญ์‹œ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • Client์˜ context๋ฅผ Server์— ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰, ์„ธ์…˜๊ณผ ์ฟ ํ‚ค์™€ ๊ฐ™์€ context ์ •๋ณด๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง‘๋‹ˆ๋‹ค.
  • Server๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ API ์„œ๋ฒ„๋Š” Client์˜ ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ฆ‰, ์ด์ „ ์š”์ฒญ์ด ๋‹ค์Œ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ์— ์—ฐ๊ด€๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ( DB์— ์˜ํ•ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ )
    • Server์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์ผ๊ด€์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง‘๋‹ˆ๋‹ค.

3.ย Cacheable (์บ์‹œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ)

  • ์›น ํ‘œ์ค€ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰, HTTP๊ฐ€ ๊ฐ€์ง„ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modified Tag ๋˜๋Š” E-Tag๋ฅผ ์ด์šฉํ•ด ์บ์‹ฑ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4.ย Layered System (๊ณ„์ธต ๊ตฌ์กฐ)

  • Client๋Š” REST API Server๋งŒ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • REST Server๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๋“ฑ์„ ์œ„ํ•œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Proxy, Gateway์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ Client๋Š” Server์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š”์ง€, ์ค‘๊ฐ„ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

5.ย Uniform Interface (์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ)

  • URI๋กœ ์ง€์ •ํ•œ Resource์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ†ต์ผ๋˜๊ณ , ํ•œ์ •์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, Loosely Coupling(๋Š์Šจํ•œ ๊ฒฐํ•จ) ํ˜•ํƒœ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
    • ์ฆ‰, ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š์Œ

6.ย Self-Descriptiveness (์ž์ฒด ํ‘œํ˜„)

  • ์š”์ฒญ ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.



REST์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ REST API ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
    • HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์ ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
    • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • REST API ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ
  • ๋‹จ์ 
    • ํ‘œ์ค€์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ 4๊ฐ€์ง€(HTTP Method) ๋ฟ
    • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„์ง ์ œ๋Œ€๋กœ ์ง€์›ํ•ด์ฃผ์ง€ ๋ชปํ•˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌ
      • PUT, DELETE๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ 



references


https://dev-coco.tistory.com/97

https://velog.io/@seokkitdo/Network-REST๋ž€-REST-API๋ž€-RESTful์ด๋ž€