[Back-End] REST, REST API, RESTful API

์œ ๋„ค์Šค์ฝ”dยท2023๋…„ 5์›” 26์ผ
0

Back-End

๋ชฉ๋ก ๋ณด๊ธฐ
1/3

๐Ÿค”REST vs REST API vs RESTful API

REST : ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ
REST API : REST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
RESTful API : REST์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์ž˜ ์ง€์ผœ์„œ ์„ค๊ณ„๋œ API (REST์˜ ์›๋ฆฌ๋ฅผ ์ž˜ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ)

API (Application Programming Interface)

  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค
  • ์‘์šฉํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ์–ด๋–ค ์‚ฌ์ดํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๊ฒฝ์šฐ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”์ง€, ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต ๋ฐ›์„ ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•œ ๊ทœ๊ฒฉ

๐Ÿ“ŒREST (Representational State Transfer)

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

  • HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ 
    HTTP Method(POST, GET, PUT, DELETE, PATCH ๋“ฑ)๋ฅผ ํ†ตํ•ด
    ํ•ด๋‹น ์ž์›(URI)์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ

    Create : ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (POST)
    Read : ๋ฐ์ดํ„ฐ ์กฐํšŒ (GET)
    Update : ๋ฐ์ดํ„ฐ ์ˆ˜์ • (PUT, PATCH)
    Delete : ๋ฐ์ดํ„ฐ ์‚ญ์ œ (DELETE)

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

  1. ์ž์›(Resource) : HTTP URI
    • Client๋Š” URI๋ฅผ ์ด์šฉํ•ด ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ Server์— ์š”์ฒญํ•œ๋‹ค.
    • ex) '/member/:member_id'
  2. ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„(Verb) : HTTP Method
  3. ํ‘œํ˜„ (Representations) : HTTP Message PayLoad
    • Client์™€ Server๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ˜•ํƒœ
    • JSON, XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

ํŠน์ง•

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

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

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

  • HTTP ํ”„๋กœํ† ์ฝœ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์ƒํƒœ์ด๋‹ค. REST ์—ญ์‹œ HTTP๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์ƒํƒœ์ด๋‹ค.
  • ๋ฌด์ƒํƒœ๋ž€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ(State)๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป
    • Client์˜ context๋ฅผ Server์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • Server๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ๊ฐ API ์„œ๋ฒ„๋Š” Client์˜ ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    • ์ด์ „ ์š”์ฒญ์ด ๋‹ค์Œ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ์— ์—ฐ๊ด€๋˜์ง€ ์•Š๋Š”๋‹ค.
    • Server์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์ผ๊ด€์„ฑ์„ ๋ถ€์—ฌํ•˜๊ณ  ๋ถ€๋‹ด์ด ์ค„์–ด๋“ ๋‹ค.

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

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

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

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

5. Code-On-Demand (Optional)

  • Server๋กœ๋ถ€ํ„ฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ›์•„์„œ Client์—์„œ ์‹คํ–‰ํ•œ๋‹ค.
  • ๋ฐ˜๋“œ์‹œ ์ถฉ์กฑํ•  ํ•„์š”๋Š” ์—†๋‹ค.

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

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

๐Ÿ“ŒREST API

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

ํŠน์ง•

  • ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€๋ฅผ ๊ทธ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ธฐ๋ณธ ๊ทœ์น™

  1. URI๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  2. ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method(GET, POST, PUT, PATCH, DELETE)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  3. ํ–‰์œ„(Method)๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„ค๊ณ„ ๊ทœ์น™

  1. URI๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๋™์‚ฌ ์‚ฌ์šฉ X)
  2. ์Šฌ๋ž˜์‹œ( / )๋กœ ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
  3. URI ๋งˆ์ง€๋ง‰์— ์Šฌ๋ž˜์‹œ ( / )๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. ์–ธ๋”๋ฐ”( _ ) ๋Œ€์‹  ํ•˜์ดํ”ˆ( - )์„ ์‚ฌ์šฉํ•œ๋‹ค.
  5. URI๋Š” ์†Œ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑํ•œ๋‹ค.
  6. ํŒŒ์ผํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
  7. ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. (Bad ex. "http://y.com/delete-post/1")
  8. HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ ์‚ฌ์šฉ

๐Ÿ’ก URI๋Š” ์ •๋ณด์˜ ์ž์›๋งŒ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ์ž์›์˜ ํ–‰์œ„๋Š” HTTP Method์— ๋ช…์‹œํ•œ๋‹ค!


๐Ÿ“ŒRESTful API

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

REST๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค ํ•˜์—ฌ ๋ชจ๋‘๊ฐ€ RESTful ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ REST API์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚จ ์‹œ์Šคํ…œ์„ RESTfulํ•˜๋‹ค ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

- CRUD ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ POST๋กœ ์ฒ˜๋ฆฌ ํ•˜๋Š” API
- URI ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚ค์ง€ ์•Š์€ API

์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ REST API์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚ค์ง€ ๋ชปํ•œ ์‹œ์Šคํ…œ์€ REST API๋ฅผ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ RESTful ํ•˜์ง€ ๋ชปํ•œ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชฉ์ 

  • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ

โ†’ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์—์„œ๋Š” ๊ตณ์ด RESTfulํ•œ API๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š”๋Š” ์—†๋‹ค!




๐Ÿ“๋ฉด์ ‘ ๋Œ€๋น„

Q. RESTful API๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A.

0๊ฐœ์˜ ๋Œ“๊ธ€