REST API์™€ RESTful API

2022. 8. 6. 17:13ยท๐Ÿ“ Computer Science/โœ Network & Web

1. REST(REpresentational State Transfer)

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

  • ์ž์›: ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด๋‹ค. Ex) ๋ฌธ์„œ, ๊ทธ๋ฆผ, ๋ฐ์ดํ„ฐ, ํ•ด๋‹น ์†Œํ”„ํŠธ์›จ์–ด ์ž์ฒด ๋“ฑ
  • ํ‘œํ˜„: ์ž์›์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฆ„์ด๋‹ค. Ex) DB์˜ ํ•™์ƒ ์ •๋ณด๊ฐ€ ์ž์›์ด๋ฉด students๋ฅผ ์ž์›์˜ ํ‘œํ˜„์œผ๋กœ ์ •ํ•œ๋‹ค.
  • ์ƒํƒœ ์ „๋‹ฌ: ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ๋˜๋Š” ์‹œ์ ์— ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. JSON ํ˜น์€ XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

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

 

1) ๊ตฌ์„ฑ ์š”์†Œ

์–ด๋–ค ์ž์›์— ๋Œ€ํ•ด CRUD(Create, Read, Update, Delete) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด URI(Resource)๋กœ GET, POST ๋“ฑ์˜ ๋ฐฉ์‹(Method)์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉฐ, ์š”์ฒญ์„ ์œ„ํ•œ ์ž์›์€ ํŠน์ •ํ•œ ํ˜•ํƒœ(Representation of Resource)๋กœ ํ‘œํ˜„๋œ๋‹ค.

  1. ์ž์›(Resource)
    • ๋ชจ๋“  ์ž์›์—๋Š” ๊ณ ์œ ํ•œ ID๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ด ์ž์›์€ Server์— ์กด์žฌํ•œ๋‹ค.
    • ์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” '/exgroups/:exgroup_id'์™€ ๊ฐ™์€ HTTP URI์ด๋‹ค.
    • Client๋Š” URI๋ฅผ ์ด์šฉํ•ด ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ Server์— ์š”์ฒญํ•œ๋‹ค.
  2. ํ–‰์œ„(Verb)
    • HTTP ํ”„๋กœํ† ์ฝœ์˜ Method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • HTTP ํ”„๋กœํ† ์ฝœ์€ GET, POST, PUT, PATCH, DELETE์˜ Method๋ฅผ ์ œ๊ณตํ•œ๋‹ค. (CRUD)
      • GET: Read, URI๊ฐ€ ๊ฐ€์ง„ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค.
      • POST: Create, ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค.
      • PUT: Update, ๋ฐ์ดํ„ฐ ์ „์ฒด๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
      • PATCH: Update, ๋ฐ์ดํ„ฐ ์ผ๋ถ€๋งŒ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
      • DELETE: Delete, ์•ˆ์ „์„ฑ ๋ฌธ์ œ๋กœ ๋Œ€๋ถ€๋ถ„ ์„œ๋ฒ„์—์„œ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค.
  3. ํ‘œํ˜„(Representation of Resource)
    • Client์™€ Server๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ˜•ํƒœ๋กœ JSON, XML, TEXT, RSS ๋“ฑ์ด ์žˆ๋‹ค.
    • JSON, XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

2) ํŠน์ง•

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

 

2. REST API

REST API๋Š” REST์˜ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

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

 

REST API ์„ค๊ณ„ ์‹œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ฒซ ๋ฒˆ์งธ, URI๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
๋‘ ๋ฒˆ์งธ, ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method(GET, POST, PUT, PATCH, DELETE)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

 

3. RESTful API

RESTful์€ REST์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์ž˜ ์ง€์ผœ์„œ ์„ค๊ณ„๋œ API๋ฅผ RESTfulํ•œ API๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, REST์˜ ์›๋ฆฌ๋ฅผ ์ž˜ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ์„ RESTful์ด๋ž€ ์šฉ์–ด๋กœ ์ง€์นญ๋œ๋‹ค.

  • RESTfulํ•˜๊ฒŒ ๋งŒ๋“  API๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์†Œ๋งŒ์œผ๋กœ๋„ ์–ด๋–ค ๊ฒƒ์„ ์š”์ฒญํ•˜๋Š”์ง€ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • RESTful API๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. ๋งŒ์•ฝ, ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด ๊ตณ์ด RESTful API๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๋Š” ์—†๋‹ค.
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Computer Science/โœ Network & Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋„คํŠธ์›Œํฌ ์ •๋ฆฌ
  • ์ฟ ํ‚ค(Cookie)์™€ ์„ธ์…˜(Session)
  • ํฌ์›Œ๋“œ(Forward) ํ”„๋ก์‹œ์™€ ๋ฆฌ๋ฒ„์Šค(Reverse) ํ”„๋ก์‹œ
  • ์›น ์„œ๋ฒ„(WS)์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS)
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
REST API์™€ RESTful API
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”