[Web] REST API๋ž€?

2025. 6. 4. 01:05ยทWeb
728x90

 

 

 

1. REST

๐Ÿ’ก REpresentational State Transfer
  • ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ : ๋ณต์žกํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ (ex. ์ธํ„ฐ๋„ท)๊ณผ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ(ex. ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €์™€ ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค ๋“ฑ)์˜ ๋“ฑ์žฅ์— ๋”ฐ๋ผ ์ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ง€์นจ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค

 

1.1. 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.2. ๊ตฌ์„ฑ์š”์†Œ

  1. ์ž์›(Resource) : HTTP URI
    • Client๋Š” URI๋ฅผ ์ด์šฉํ•ด ์ž์›์„ ์ง€์ • ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด=Payload)์˜ ์กฐ์ž‘์„ Server์— ์š”์ฒญ
  2. ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„(Verb) : HTTP Method
  3. ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„์˜ ํ‘œํ˜„(Representation of Resource)
    • JSON, XML, TEXT, RSS๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ์‘๋‹ต

 

1.3. ํŠน์ง• ๋ฐ ์žฅ๋‹จ์ 

  • ํŠน์ง•
    1. Uniform (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)
      • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ
    2. Stateless (๋ฌด์ƒํƒœ์„ฑ)
      • ์ž‘์—…์„ ์œ„ํ•œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅ / ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค
    3. Cacheable (์บ์‹œ ๊ฐ€๋Šฅ)
      • HTTP๋ผ๋Š” ๊ธฐ์กด ์›น ํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
      • → HTTP์˜ ์บ์‹ฑ ๊ธฐ๋Šฅ ์ ์šฉ ๊ฐ€๋Šฅ (Last-Modified ํƒœ๊ทธ, E-Tag๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ๊ฐ€๋Šฅ)
    4. Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)
      • REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์‰ฝ๊ฒŒ ์ดํ•ด ๊ฐ€๋Šฅ
    5. Client-Server ๊ตฌ์กฐ
      • Client, Server์—์„œ ๊ฐœ๋ฐœํ•  ๋‚ด์šฉ์ด ๋ช…ํ™•ํ•˜๊ณ  ์˜์กด์„ฑ ๊ฐ์†Œ
        • ๊ฐ๊ฐ Client๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํ…์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด), Server๋Š” API ์ œ๊ณต ๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ
    6. ๊ณ„์ธตํ˜• ๊ตฌ์กฐ
      • ๋‹ค์ค‘ ๊ณ„์ธต ๊ตฌ์„ฑ ๊ฐ€๋Šฅ→ PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ์ค‘๊ฐ„ ๋งค์ฒด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
      • → ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต ์ถ”๊ฐ€ํ•˜๋Š” ๊ตฌ์กฐ์ƒ ์œ ์—ฐ์„ฑ
  • ์žฅ๋‹จ์ 
์žฅ์  - HTTP ํ”„๋กœํ† ์ฝœ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ, REST API๋ฅผ ์œ„ํ•œ ๋ณ„๋„ ์ธํ”„๋ผ ๊ตฌ์ถ• ํ•„์š” X
- HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ, ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์  ํ•จ๊ป˜ ๊ฐ€์ ธ๊ฐ
- HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- Hypermedia API์˜ ๊ธฐ์ค€์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉฐ ๋ฒ”์šฉ์„ฑ ๋ณด์žฅ
- REST API ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…ํ™•ํžˆ ๋‚˜ํƒ€๋ƒ„ → ์˜๋„ํ•˜๋Š” ๋ฐ” ์‰ฝ๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅ
- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„œ๋น„์Šค ๋””์ž์ธ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ ์ตœ์†Œํ™” - ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌ
๋‹จ์  - ํ‘œ์ค€์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
- ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ 4๊ฐ€์ง€ ๋ฟ์ž„ (HTTP Method ํ˜•ํƒœ๊ฐ€ ์ œํ•œ์ )
- ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•  ์ผ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ผ๋ฉด, ์‰ฝ๊ฒŒ ๊ณ ์น ์ˆ˜ ์žˆ๋Š” URL๋ณด๋‹ค Header ์ •๋ณด์˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋จ
- ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๋Œ€๋กœ ์ง€์›ํ•ด์ฃผ์ง€ ๋ชปํ•˜๋Š” ๋ถ€๋ถ„ ์กด์žฌ (ex. PUT / DELETE ์‚ฌ์šฉ ๋ถˆ๊ฐ€, pushState ์ง€์› ์•ˆํ•จ)

 

 

 

2. REST API

๐Ÿ’กREST์˜ ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๋Š” API

 

2.0. API ๋ž€?

๐Ÿ’กApplication Programming Interface
  • ์†Œํ”„ํŠธ์›จ์–ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ ๋˜๋Š” ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

 

2.1. REST API ์„ค๊ณ„ ๊ทœ์น™

2.1.1. ์ค‘์‹ฌ ๊ทœ์น™

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

2.1.2. ์„ธ๋ถ€ ๊ทœ์น™

  1. URI๋Š” ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ž์›์˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
    • ์ปจํŠธ๋กค ์ž์›์„ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ์ ์œผ๋กœ ๋™์‚ฌ ํ—ˆ์šฉ
  2. URI ๊ฒฝ๋กœ์—๋Š” ์†Œ๋ฌธ์ž๊ฐ€ ์ ํ•ฉํ•˜๋‹ค
  3. ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค
    • ๋Œ€์‹  Accept Header๋ฅผ ์‚ฌ์šฉ (ex. GET : http://syun.com/orders/2/Accept: image/jpg )
  4. ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/)๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค
  5. URI ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์Šฌ๋ž˜์‹œ(/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค
  6. ๋ฐ‘์ค„(_)์€ URI์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉํ•œ๋‹ค
  7. ๋ฆฌ์†Œ์Šค ๊ฐ„์— ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(ex. GET : /users/{userid}/devices (์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์œ (has)์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ) )
  8. → /๋ฆฌ์†Œ์Šค๋ช…/๋ฆฌ์†Œ์Šค ID/๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ช…

 

 

 

3. RESTful API

๐Ÿ’กREST API์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€ํ‚จ ์‹œ์Šคํ…œ
    - REST๋ฅผ REST๋‹ต๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋ˆ„๊ตฐ๊ฐ€ ๊ณต์‹์  ๋ฐœํ‘œํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค
  • REST API์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋”ฐ๋ฅด๋ฉด์„œ, URI์™€ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ์ž์› ์กฐ์ž‘
    • REST API๋ฅผ ๊ฐœ์„ ํ•˜๊ณ , ๋ณด๋‹ค ์ผ๊ด€์„ฑ ์žˆ๋Š” API ๊ตฌํ˜„ํ•˜๋„๋ก ํ•ด์ค€๋‹ค
    • ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์†Œ๋งŒ์œผ๋กœ๋„ ์–ด๋–ค ๊ฒƒ์„ ์š”์ฒญํ•˜๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ (๋” ๊ฐ„ํŽธํ•˜๊ณ  ์ง๊ด€์ ์ธ ๊ตฌ์กฐ)
  • ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์ด๋ผ๋ฉด ๊ตณ์ด RESTfulํ•œ API๋ฅผ ๊ตฌํ˜„ํ•  ํ•„์š” X
  • ๋ชฉ์  : ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ

 

 

 

999. ์ •๋ฆฌ

  • REST : HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ Client-Server ์‚ฌ์ด ํ†ต์‹  ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜
  • REST API : REST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
  • RESTful : REST๋ฅผ REST๋‹ต๊ฒŒ, REST ์›๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ

 

 

 

 

 


๐Ÿ“Œ References

https://junvelee.tistory.com/107

https://khj93.tistory.com/entry/๋„คํŠธ์›Œํฌ-REST-API๋ž€-REST-RESTful์ด๋ž€#google_vignette

https://velog.io/@dongjun187/API๋ž€-๋ฌด์—‡์ธ๊ฐ€

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

https://velog.io/@somday/RESTful-API-์ด๋ž€#rest-api-ํƒ„์ƒ-๋ฐฐ๊ฒฝ

https://digitaloasis.tistory.com/entry/rest-api-and-restful-api

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

https://uiop5809.tistory.com/166

 

 

 

 

 

 

 

 

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] ์„œ๋ฒ„ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜์™€ ๋„๊ตฌ ๋ฐ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ ๋Œ€๋น„  (0) 2024.05.03
[Web] ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ (Servlet Filter)  (1) 2024.02.01
[Web] JSP๋ž€? JSP ํ˜ธ์ถœ๊ณผ์ • / ๊ธฐ๋ณธ๊ฐ์ฒด / EL / JSTL  (1) 2024.02.01
[Web] ์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€? JSP์™€ MVC ํŒจํ„ด์œผ๋กœ์˜ ๋ณ€ํ™”  (1) 2024.01.31
[Web] HTTP ์‘๋‹ต ์ƒํƒœ์ฝ”๋“œ์™€ ์š”์ฒญ ๋ฉ”์„œ๋“œ(GET / POST)  (0) 2024.01.31
'Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Web] ์„œ๋ฒ„ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ข…๋ฅ˜์™€ ๋„๊ตฌ ๋ฐ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ƒํ™ฉ ๋Œ€๋น„
  • [Web] ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ (Servlet Filter)
  • [Web] JSP๋ž€? JSP ํ˜ธ์ถœ๊ณผ์ • / ๊ธฐ๋ณธ๊ฐ์ฒด / EL / JSTL
  • [Web] ์„œ๋ธ”๋ฆฟ(Servlet)์ด๋ž€? JSP์™€ MVC ํŒจํ„ด์œผ๋กœ์˜ ๋ณ€ํ™”
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (339)
      • Web (8)
      • Java (7)
      • Spring (19)
      • Git (16)
      • MyBatis (1)
      • HTML & CSS (14)
      • JavaScript (11)
      • DevOps (4)
      • Cloud (8)
      • Lanuage (13)
        • C++ (3)
        • Python (10)
      • DB (1)
        • MySQL (1)
        • Oracle (2)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Baekjoon (104)
        • ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ (78)
      • CodeUp (98)
        • Python ๊ธฐ์ดˆ 100์ œ (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

    • Syun's Pages
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    github
    myBatis
    VS Code
    Programmers
    clean code
    HTML
    Tistory
    codeup
    db
    ์ž๋ฃŒ๊ตฌ์กฐ
    java
    MySQL
    web
    C
    ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ
    spring
    Python
    git
    Cloud
    SourceTree
    BOJ
    CodeUp ๊ธฐ์ดˆ 100์ œ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    c++
    ์›น
    oracle
    CSS
    aws
    JavaScript
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
s_ih_yun
[Web] REST API๋ž€?
์ƒ๋‹จ์œผ๋กœ

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