REST๋ž€?(What is REST)

2023. 2. 26. 20:05ยทIT/RESTful

REST๋Š” ์•ฝ์–ด์ž…๋‹ˆ๋‹ค.

for REpresentational State Transfer and an architectural style for distributed hypermedia systems.

๋กœ์ด ํ•„๋”ฉ (Roy Fielding)์€ 2000 ๋…„ ๊ทธ์˜ ์œ ๋ช…ํ•œ ๋…ผ๋ฌธ์—์„œ ์ฒ˜์Œ์œผ๋กœ ๊ทธ๊ฒƒ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ REST์—๋Š” ๊ธฐ๋ณธ ์›์น™๊ณผ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ RESTful์ด๋ผ๊ณ  ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์›์น™์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

A Web API (or Web Service) conforming to the REST architectural style is a REST API.

1. Guiding Principles of REST

RESTful ์•„ํ‚คํ…์ฒ˜์˜ 6๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™ ๋˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1.1. Uniform Interface

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

์—ฌ๋Ÿฌ ์•„ํ‚คํ…์ฒ˜ ์ œ์•ฝ ์กฐ๊ฑด์€ ๊ท ์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–ป๊ณ  ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋™์ž‘์„ ์•ˆ๋‚ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด์€ ๊ท ์ผํ•œ REST ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Identification of resources – ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ๊ณผ ๊ด€๋ จ๋œ ๊ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Manipulation of resources through representations – ๋ฆฌ์†Œ์Šค๋Š” ์„œ๋ฒ„ ์‘๋‹ต์—์„œ ๊ท ์ผํ•œ ํ‘œํ˜„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. API ์†Œ๋น„์ž๋Š” ์ด๋Ÿฌํ•œ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Self-descriptive messages – ๊ฐ ๋ฆฌ์†Œ์Šค ํ‘œํ˜„์€ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์ž‘์—…์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Hypermedia as the engine of application state – ํด๋ผ์ด์–ธํŠธ์—๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ดˆ๊ธฐ URI๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•˜์ดํผ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋™์ ์œผ๋กœ ๊ตฌ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1.2. Client-Server

ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋””์ž์ธ ํŒจํ„ด์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฌธ์ œ ๋ถ„๋ฆฌ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ฌธ์ œ(ํด๋ผ์ด์–ธํŠธ)์™€ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฌธ์ œ(์„œ๋ฒ„)๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด์‹์„ฑ์„ ๊ฐœ์„ ํ•˜๊ณ  ์„œ๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ง„ํ™”ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค / ๊ณ„์•ฝ์ด ๊นจ์ง€์ง€ ์•Š๋„๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

1.3. Stateless

์ƒํƒœ ๋น„์ €์žฅ์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ์˜ ๊ฐ ์š”์ฒญ์— ์š”์ฒญ์„ ์ดํ•ดํ•˜๊ณ  ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„๋Š” ์ด์ „์— ์„œ๋ฒ„์— ์ €์žฅ๋œ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ์™„์ „ํžˆ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1.4. Cacheable

์บ์‹œ ๊ฐ€๋Šฅ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‘๋‹ต์ด ์•”์‹œ์  ๋˜๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ž์‹ ์„ ์บ์‹œ ๊ฐ€๋Šฅ ๋˜๋Š” ์บ์‹œ ๋ถˆ๊ฐ€๋Šฅ์œผ๋กœ ๋ ˆ์ด๋ธ”์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‘๋‹ต์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋‚˜์ค‘์— ๋™๋“ฑํ•œ ์š”์ฒญ ๋ฐ ์ง€์ •๋œ ๊ธฐ๊ฐ„์— ๋Œ€ํ•ด ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

1.5. Layered System

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

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ์—์„œ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐ”๋กœ ๊ณ„์ธต ๋„ˆ๋จธ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

1.6. Code on Demand (Optional)

๋˜ํ•œ REST๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฟ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œํ•œ ์ฝ”๋“œ๋Š” ์‚ฌ์ „ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์ˆ˜๋ฅผ ์ค„์—ฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ฝ”๋“œ ํ˜•ํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

2. What is a Resource?

REST์—์„œ ์ •๋ณด์˜ ์ฃผ์š” ์ถ”์ƒํ™”๋Š” ๋ฆฌ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์ •๋ณด๋Š” ์ž์›์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, REST ์ž์›์€ ๋ฌธ์„œ ๋˜๋Š” ์ด๋ฏธ์ง€, ์ž„์‹œ ์„œ๋น„์Šค, ๋‹ค๋ฅธ ์ž์›๋“ค์˜ ์ฝœ๋ ‰์…˜, ๋˜๋Š” ๋น„-๊ฐ€์ƒ ๊ฐ์ฒด(์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ)์ผ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ์‹œ๊ฐ„์— ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ž์› ํ‘œํ˜„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ž์› ํ‘œํ˜„์€ ๋‹ค์Œ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • the data
  • the metadata describing the data
  • and the hypermedia links that can help the clients in transition to the next desired state.

REST API๋Š” ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ๋ฆฌ์†Œ์Šค์˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฆฌ์†Œ์Šค ์ง‘ํ•ฉ์„ REST API์˜ ๋ฆฌ์†Œ์Šค ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

2.1. Resource Identifiers

REST๋Š” ์ž์› ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์— ๊ด€๋ จ๋œ ๊ฐ ์ž์›์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

2.2. Hypermedia

ํ‘œํ˜„์˜ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋ฏธ๋””์–ด ์œ ํ˜•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋งค์ฒด ์œ ํ˜•์€ ํ‘œํ˜„์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ์ŠคํŽ™์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

RESTful API๋Š” ํ•˜์ดํผ ํ…์ŠคํŠธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ •๋ณด์˜ ๋ชจ๋“  ์–ด๋“œ๋ ˆ์Šค ๊ฐ€๋Šฅ ์œ ๋‹›์€ ๋ช…์‹œ์ ์œผ๋กœ(์˜ˆ๋ฅผ ๋“ค์–ด, ๋งํฌ ๋ฐ id ์†์„ฑ๋“ค) ๋˜๋Š” ์•”์‹œ์ ์œผ๋กœ(์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฏธ๋””์–ด ์œ ํ˜• ์ •์˜ ๋ฐ ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ) ์–ด๋“œ๋ ˆ์Šค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

ํ•˜์ดํผ ํ…์ŠคํŠธ (๋˜๋Š” ํ•˜์ดํผ ๋ฏธ๋””์–ด)๋Š” ์ •๋ณด๊ฐ€ ์‚ฌ์šฉ์ž (๋˜๋Š” ์˜คํ†  ๋งˆํ†ค)๊ฐ€ ์„ ํƒ์„ ์–ป๊ณ  ์ž‘์—…์„ ์„ ํƒํ•˜๋Š” ์–ดํฌ๋˜์Šค๊ฐ€๋˜๋„๋ก ์ •๋ณด์™€ ์ œ์–ด์˜ ๋™์‹œ ํ‘œ์‹œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ดํผํ…์ŠคํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ HTML(๋˜๋Š” XML ๋˜๋Š” JSON)์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๊ณ„๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹๊ณผ ๊ด€๊ณ„ ์œ ํ˜•์„ ์ดํ•ดํ•  ๋•Œ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

— Roy Fielding

2.3. Self-Descriptive

๋˜ํ•œ, ์ž์› ํ‘œํ˜„์€ ์ž๊ธฐ ์„ค๋ช…์ ์ด์–ด์•ผ ํ•œ๋‹ค: ํด๋ผ์ด์–ธํŠธ๋Š” ์ž์›์ด ์ง์›์ธ์ง€ ์žฅ์น˜์ธ์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ๋ฏธ๋””์–ด ์œ ํ˜•์— ๋”ฐ๋ผ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ๋Š” ๋งŽ์€ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฏธ๋””์–ด ์œ ํ˜•(์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฆฌ์†Œ์Šค์™€ ์—ฐ๊ฒฐ๋œ ํ•˜๋‚˜์˜ ๋ฏธ๋””์–ด ์œ ํ˜•)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฏธ๋””์–ด ์œ ํ˜•์€ ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ ๋ชจ๋ธ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HTML์€ ํ•˜์ดํผํ…์ŠคํŠธ์— ๋Œ€ํ•œ ๋ Œ๋”๋ง ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ ์š”์†Œ ์ฃผ๋ณ€์˜ ๋ธŒ๋ผ์šฐ์ € ๋™์ž‘์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฏธ๋””์–ด ์œ ํ˜•์€ ๋ฆฌ์†Œ์Šค ๋ฉ”์„œ๋“œ GET / PUT / POST / DELETE / ... ์ผ๋ถ€ ๋ฏธ๋””์–ด ์œ ํ˜• ์š”์†Œ๋Š” "href ์†์„ฑ์ด์žˆ๋Š” ์•ต์ปค ์š”์†Œ๋Š” ์„ ํƒ์‹œ CDATA๋กœ ์ธ์ฝ”๋”ฉ ๋œ href ์†์„ฑ์— ํ•ด๋‹นํ•˜๋Š” URI์—์„œ ๊ฒ€์ƒ‰ ์š”์ฒญ (GET)์„ ํ˜ธ์ถœํ•˜๋Š” ํ•˜์ดํผ ํ…์ŠคํŠธ ๋งํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค."

3. Resource Methods

REST์™€ ๊ด€๋ จ๋œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž์› ๋ฉ”์†Œ๋“œ๋Š” ์ž์›์˜ ๋‘ ์ƒํƒœ ์‚ฌ์ด์—์„œ ์›ํ•˜๋Š” ์ „ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฆฌ์†Œ์Šค ๋ฉ”์„œ๋“œ๋ฅผ HTTP ๋ฉ”์„œ๋“œ (์˜ˆ : GET / PUT / POST / DELETE)์™€ ์ž˜๋ชป ์—ฐ๊ด€์‹œํ‚ต๋‹ˆ๋‹ค. Roy Fielding์€ ์–ด๋–ค ์กฐ๊ฑด์—์„œ ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์–ธ๊ธ‰ ํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฐ€ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ์€ ๊ท ์ผ ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด HTTP PUT์„ ๊ถŒ์žฅํ•˜๋Š” ๋Œ€์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ API๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด HTTP POST๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐํŽ˜์ด์Šค๋Š” RESTful์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์œผ๋กœ๋Š” ์ž์› ์ƒํƒœ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ž์› ํ‘œํ˜„์˜ ์ผ๋ถ€๊ฐ€๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค - ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•๊ณผ ํ‘œํ˜„์„ ๋– ๋‚  ํ˜•์‹์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐ URI (์ฑ…๊ฐˆํ”ผ)์™€ ์˜๋„ ๋œ ๋Œ€์ƒ์— ์ ํ•ฉํ•œ ํ‘œ์ค€ํ™” ๋œ ๋ฏธ๋””์–ด ์œ ํ˜• ์ง‘ํ•ฉ (์ฆ‰, API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ดํ•ดํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ)์„ ๋„˜์–ด์„œ๋Š” ์‚ฌ์ „ ์ง€์‹์ด์—†๋Š” REST API๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

์ „์ด๋Š” ๋ฏธ๋””์–ด ์œ ํ˜•๋“ค ๋ฐ ์ž์› ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜๋“ค์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์ง€์‹์— ์˜ํ•ด ๊ฒฐ์ •(๋˜๋Š” ์ œํ•œ)๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋“ค ๋ชจ๋‘๋Š” ์ฆ‰์„์—์„œ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋‹ค(์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ๋ฌธํ˜• ์ฝ”๋“œ). [์—ฌ๊ธฐ์„œ ์‹คํŒจ๋Š” ๋Œ€์—ญ ์™ธ ์ •๋ณด๊ฐ€ ํ•˜์ดํผํ…์ŠคํŠธ ๋Œ€์‹  ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ ๋„ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.]

4. REST and HTTP are Not the Same

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด HTTP์™€ REST๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. REST์™€ HTTP๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

REST != HTTP

REST๋Š” ๋˜ํ•œ ์›น (์ธํ„ฐ๋„ท)์„๋ณด๋‹ค ๋Šฅ๋ฅ ์ ์ด๊ณ  ํ‘œ์ค€์œผ๋กœ ๋งŒ๋“ค๋ ค๊ณ ํ•˜์ง€๋งŒ Roy Fielding์€ REST ์›์น™์„๋ณด๋‹ค ์—„๊ฒฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด REST๋ฅผ ์›น๊ณผ ๋น„๊ตํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

Roy Fielding์€ ๊ทธ์˜ ๋…ผ๋ฌธ์—์„œ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ณธ ์„ค์ •์ด๋‚˜ HTTP๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ตฌํ˜„ ๋ฐฉํ–ฅ์„ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋•Œ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” REST์˜ 6 ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์„ ์กด์ค‘ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ,์ด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ์ธ RESTful์ด๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. Summary

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์—์„œ ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์€ ๋ฆฌ์†Œ์Šค๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ URI(๋ฒ”์šฉ ๋ฆฌ์†Œ์Šค ์‹๋ณ„์ž)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค๋ฉ๋‹ˆ๋‹ค.

๋ฆฌ์†Œ์Šค๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ž˜ ์ •์˜๋œ ์ž‘์—… ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTML, XML, ์ผ๋ฐ˜ ํ…์ŠคํŠธ, PDF, JPEG, JSON ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์ฝ˜ํ…์ธ ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„์—์„œ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์˜ ํ‘œํ˜„์„ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ HTTP๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ REST๋Š”์ด๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž์›์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์บ์‹ฑ์„ ์ œ์–ดํ•˜๊ณ , ์ „์†ก ์˜ค๋ฅ˜๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ ์ ˆํ•œ ํ‘œํ˜„ ํ˜•์‹์„ ํ˜‘์ƒํ•˜๊ณ , ์ธ์ฆ ๋˜๋Š” ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์„œ๋ฒ„์™€์˜ ๋ชจ๋“  ์ƒํ˜ธ ์ž‘์šฉ์ด ์ƒํƒœ ๋น„์ €์žฅ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์›์น™์€ RESTful ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

์ฐธ์กฐ:

  • REST APIs must be hypertext-driven
  • REST Arch Style
 

Fielding Dissertation: CHAPTER 5: Representational State Transfer (REST)

proxy CERN Proxy, Netscape Proxy, Gauntlet

www.ics.uci.edu

 

 

728x90
'IT/RESTful' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • REST API URI ๋””์ž์ธ์— ๋Œ€ํ•œ 7๊ฐ€์ง€ ๊ทœ์น™
  • REST API๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•(How to Design a REST API)
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์˜ค๋Š˜์˜๋‰ด์Šค
    ํƒœ๊ตญ
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
    ๋ธŒ๋ฆฌํ•‘
    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ๋‰ด์Šค
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
    ํ€˜์ŠคํŠธ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
REST๋ž€?(What is REST)
์ƒ๋‹จ์œผ๋กœ

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