6_oHji
6_oHji
ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค☺
GitHub   Gmail
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (62)
    • ๐Ÿ’ก DEEP DIVE (17)
      • PATTERN (17)
    • ๐Ÿ“ ๋„์ ๋„์  (4)
    • ๐ŸŒˆ EXPERIENCE (3)
    • ๐Ÿ’ป PROJECT (3)
    • ๐Ÿ“’ STUDY (34)
      • ALGORITHM (1)
      • JAVA (5)
      • FRONT-END (7)
      • BACK-END (10)
      • SPRING (7)
      • NETWORK (3)
      • CLOUD (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ

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

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ์Šคํ† ๋ฆฌ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ
hELLO ยท Designed By ์ •์ƒ์šฐ.
6_oHji
6_oHji
๐Ÿ“’ STUDY/NETWORK

REST ๊ฐœ๋…, ๊ตฌ์„ฑ ์š”์†Œ, ํŠน์ง•, ์žฅ๋‹จ์ 

2023. 1. 16. 11:18

REST(REpresentational State Transfer)๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ Client์™€ Server ์‚ฌ์ด์˜ ํ†ต์‹  ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ์ž์›(resource)์˜ ํ‘œํ˜„(representation)์— ์˜ํ•œ ์ƒํƒœ ์ „๋‹ฌ(state transfer)์„ ๋œปํ•œ๋‹ค.

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

 

๐Ÿ’ก ๊ฐœ๋…

HTTP URI ๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT, DELETE) ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation(Create, Read, Update, Delete)์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • REST๋Š” ์ž์› ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์„ค๊ณ„์˜ ์ค‘์‹ฌ์— Resource๊ฐ€ ์žˆ๊ณ  HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.
  • ์›น ์‚ฌ์ดํŠธ์˜ ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ, DB ๋‚ด์šฉ ๋“ฑ์˜ ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID์ธ HTTP URI๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

 

 

๐Ÿ’ก ๊ตฌ์„ฑ ์š”์†Œ

1. ์ž์›(Resource) - URI

  • ๋ชจ๋“  ์ž์›์—๋Š” ๊ณ ์œ ํ•œ ID๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ์ž์›์€ Server์— ์กด์žฌํ•œ๋‹ค.
  • ์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” '/exgroups/:exgroup_id'์™€ ๊ฐ™์€ HTTP URI ์ด๋‹ค.
  • Client๋Š” URI๋ฅผ ์ด์šฉํ•ด ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ Server์— ์š”์ฒญํ•œ๋‹ค.

2. ํ–‰์œ„(Verb) - Method

  • 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์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

 

๐Ÿ’ก ํŠน์ง•

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 (์ž์ฒด ํ‘œํ˜„)

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

 

 

๐Ÿ’ก ์žฅ๋‹จ์ 

์žฅ์ 

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

๋‹จ์ 

  • ํ‘œ์ค€์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ 4๊ฐ€์ง€(HTTP Method) ๋ฟ์ด๋‹ค.
  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•„์ง ์ œ๋Œ€๋กœ ์ง€์›ํ•ด์ฃผ์ง€ ๋ชปํ•˜๋Š” ๋ถ€๋ถ„(PUT, DELETE)์ด ์กด์žฌํ•œ๋‹ค.

 

์ฐธ๊ณ  ๋ธ”๋กœ๊ทธ :

https://velog.io/@seokkitdo/Network-REST%EB%9E%80-REST-API%EB%9E%80-RESTful%EC%9D%B4%EB%9E%80

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

 

 

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋™์ผ์กฐ๊ฑด (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ“’ STUDY/NETWORK' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํ”„๋กœํ† ์ฝœ ์ •์˜, ๊ธฐ๋ณธ ์š”์†Œ, ์ข…๋ฅ˜, ๊ธฐ๋Šฅ
    • IP ์ฃผ์†Œ ์ฒด๊ณ„(IPv4, IPv6), DNS
    6_oHji
    6_oHji
    ๋„์ ๋„์ 

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