๐ REST๋ ๋ฌด์์ธ๊ฐ?
~> REST(Representational State Transfer)๋ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ
์ ์ํ ์ํคํ
์ฒ ์คํ์ผ๋ก, ์น์ ๋
๋ฆฝ์ ์งํ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ 6๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด ์กด์ฌํ๋ค.
1. Client-Server: ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ญํ ๋ถ๋ฆฌ
2. Stateless: ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์
3. Cacheable: ์๋ต์ ์บ์ ๊ฐ๋ฅํด์ผ ํจ
4. Uniform Interface: ์ผ๊ด๋ ์ธํฐํ์ด์ค ์ ๊ณต
5. Layered System: ๊ณ์ธตํ๋ ์์คํ
๊ตฌ์กฐ
6. Code-on-Demand (Optional): ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ์ฝ๋๋ฅผ ์ ์กํ ์ ์์
๐ REST์ ํต์ฌ - Uniform Interface
~> ์ด ๋ฐํ์์๋ ํนํ Uniform Interface์ 2๊ฐ์ง ์ธ๋ถ ์กฐ๊ฑด์ ์ฃผ๋ชฉํ๋ค
1. Self-descriptive Messages
• ๋ฉ์์ง ์์ฒด๋ง์ผ๋ก ์๋ฏธ๋ฅผ ํ์
ํ ์ ์์ด์ผ ํจ
• ์์ฒญ/์๋ต์๋ ๋ฉํ์ ๋ณด(์: Content-Type, Link ๋ฑ)๊ฐ ํฌํจ๋์ด์ผ ํจ
2. HATEOAS (Hypermedia as the Engine of Application State)
• ํด๋ผ์ด์ธํธ๋ ์๋ต์ ํฌํจ๋ ํ์ดํผ๋งํฌ๋ฅผ ํตํด ๋ค์ ํ๋์ ์ ๋๋ฐ์์ผ ํจ
• ์: HTML์์ <a href="/edit">์์ </a> ๊ฐ์ ์ญํ
๐ REST๋ฅผ ์งํค๊ธฐ ์ด๋ ค์ด ์ด์
ํญ๋ชฉ | ํํ ์น ํ์ด์ง | HTTP API |
Protocol | HTTP | HTTP |
์ปค๋ฎค๋์ผ์ด์ | ์ฌ๋ ↔ ๊ธฐ๊ณ | ๊ธฐ๊ณ ↔ ๊ธฐ๊ณ |
Media Type | HTML | JSON |
~> REST์ ๋ณธ์ง์ ์ดํดํ๊ธฐ ์ํด ๋จผ์ HTML ๊ธฐ๋ฐ์ “์น”๊ณผ JSON ๊ธฐ๋ฐ์ “HTTP API”๊ฐ ์ด๋ป๊ฒ ๋ค๋ฅด๋๋ฅผ ๋น๊ตํ๋ค.
~> REST๋ HTML ๊ธฐ๋ฐ ์น์ ์ ์ ๋ก ํ์ง๋ง, ํ๋ API๋ JSON์ ์ฌ์ฉํ๊ณ , ์ฃผ์ฒด๋ ์ฌ๋ ↔ ๊ธฐ๊ณ ์์ ๊ธฐ๊ณ ↔ ๊ธฐ๊ณ๋ก ๋ฐ๋์๋ค.
๐ HTML vs JSON - ์ REST๊ฐ ์ด๋ ค์ด๊ฐ?
1. HTML์ REST์ ์ ๋ง๋๋ค.
โ
Self-descriptive (์์ฒด ์ค๋ช
๋ฉ์์ง)
~> Content-Type: text/html ์ ๋ณด๊ณ HTML ๋ฌธ์์์ ์๋ค.
~> text/html์ IANA์ ๋ฑ๋ก๋ ํ์ค media type์ด๋ค.
~> ๋ช
์ธ๋ W3C HTML ๋ช
์ธ์์ ํ์ธํ ์ ์๋ค.
~> HTML ํ๊ทธ <a>, <form> ๋ฑ์ ์ฌ์ฉ์๊ฐ ์ด๋ค ํ๋์ ํ ์ ์๋์ง ์์ฐ์ค๋ฝ๊ฒ ์๋ดํ๋ค.
โ
HATEOAS (ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํตํ ์ํ ์ ์ด)
~> <a href="..."> ๋งํฌ๋ง์ผ๋ก ๋ค์ ํ๋์ ์ ๋ํ ์ ์๋ค.
~> ์ฌ์ฉ์(๋๋ ๋ธ๋ผ์ฐ์ )๋ ๋ฌธ์ ์์ ๋งํฌ๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ค.
~> ์ฆ, ๋ฉ์์ง๋ง์ผ๋ก ์ํ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
2. JSON์ REST์ ์ ํฉํ์ง ์๋ค.
โ Self-descriptive (์์ฒด ์ค๋ช
๋ฉ์์ง)
~> Content-Type: application/json์ด ๋ช
์๋ผ ์์ผ๋, JSON ๋ด๋ถ์ "id", "title"์ด ๋ฌด์์ ์๋ฏธํ๋์ง๋ ์ธ๋ถ ๋ฌธ์ ์์ด๋ ์ ์ ์๋ค.
~> ๋ช
์ธ๋ ์์ง๋ง, ํ๋์ ์๋ฏธ๊น์ง๋ ์ค๋ช
ํ์ง ์์ผ๋ฏ๋ก, ์ฌ๋์ด ํด์ํด์ผ ํ๋ค.
โ HATEOAS (ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํตํ ์ํ ์ ์ด)
~> JSON ์๋ต์๋ "๋ค์์ ๋ญ ํ ์ ์๋์ง"๋ฅผ ์๋ ค์ฃผ๋ ๋งํฌ๊ฐ ์๋ค.
~> /todos/1์ ์์ ํ๋ ค๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ API ๋ฌธ์๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค.
~> ์ฆ, ์๊ธฐ ๊ธฐ์ ์ด ์๋, ์ฌ์ ์ง์์ ์์กดํ๋ค.
๐ ๊ทธ๋์ ๋๋ถ๋ถ์ REST API๋ ์ฌ์ค "RESTful" ํ์ง ์๋ค.
์์ ๊ฐ์ด REST์ ๋ณธ์ง์ ์ธ ์ ์ฝ์ ๋ง์กฑ์ํค๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ์ค๋ฌด์์๋ ๋๋ถ๋ถ์ JSON ๊ธฐ๋ฐ API๊ฐ ์ค์ ๋ก๋ REST์ค๋ฝ์ง ์์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด์ ๋ฅผ ์ ๋ฆฌํด ๋ณด์๋ฉด
1. JSON์ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ํํํ๊ธฐ ์ด๋ ต๋ค.
~> HTML์ <a>, <form> ๋ฑ์ผ๋ก ๋ค์ ํ๋์ ์์ฐ์ค๋ฝ๊ฒ ์ ๋ํ์ง๋ง, JSON์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ง ํํํ๊ณ , ๋ค์ ํ๋์ ๋ํ ๋งํฌ๋ฅผ ๋ด์ง ์๋๋ค.
2. ํด๋ผ์ด์ธํธ๋ ํ๋์ฝ๋ฉ๋ URL์ ์ฌ์ฉํ๋ค.
~> ๋งํฌ๊ฐ ๋ฉ์์ง ์์ ์๊ธฐ ๋๋ฌธ์, ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ ์ ๊ฒฝ๋ก(/todos/{id}/edit ๋ฑ)๋ฅผ ์์์ผ ๋์ ๊ฐ๋ฅํ๋ค.
3. API ๋ฌธ์๊ฐ ์์ผ๋ฉด ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
~> REST๋ผ๋ฉด ๋ฉ์์ง ์์ฒด๋ง์ผ๋ก ์ฌ์ฉ๋ฒ์ด ๋ณด์ฌ์ผ ํ์ง๋ง, JSON์ ํ๋๋ช
์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ค๋ช
ํ์ง ์๊ธฐ ๋๋ฌธ์ Swagger ๊ฐ์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผ ํ๋ค.
• ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ์ด ๋์์ง๋ค.
~> Self-descriptive ๋๋ HATEOAS๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์ปค์คํ
๋ฏธ๋์ด ํ์
, ๋งํฌ ์ฝ์
, ๋ช
์ธ ๋ฌธ์ ๊ด๋ฆฌ ๋ฑ ์ถ๊ฐ ๊ตฌํ๊ณผ ํ์คํ ์์
์ด ํ์ํ๋ค.
๊ทธ๋ผ์๋ ์ JSON์ ์ฐ๋๊ฐ?
์ด์ | ์ค๋ช |
HTML์ ์ฌ๋์ ์ํ ํฌ๋งท | JSON์ ๊ธฐ๊ณ ๊ฐ ํต์ ์ ์ต์ ํ |
REST๋ ์๋ '์ฌ๋ ↔ ์น'์ ์ด์ | ์ง๊ธ์ ๋๋ถ๋ถ '๊ธฐ๊ณ ↔ ๊ธฐ๊ณ' ํต์ (HTTP API) |
JSON์ ๊ฐ๋ณ๊ณ ์ฌ์ฉ์ด ์ฌ์ | ํ์ง๋ง REST ์ฒ ํ์ ๋ด๊ธฐ์๋ ์ ๋ณด๊ฐ ๋ถ์กฑํจ |
์ค์ ๋ก HATEOAS ๊ตฌํ ๋ถ๋ด์ด ํผ | ๋๋ถ๋ถ ์๋ต๋จ, ์ฌ์ค์ ๋ฌธ์ ๊ธฐ๋ฐ ํต์ |
๐ ๋์์? ๋ ์ ์งํ๊ฒ ๋ถ๋ฅด๊ธฐ
• ๋ชจ๋ API๋ฅผ REST API๋ผ๊ณ ๋ถ๋ฅด์ง ๋ง์. (์ฆ, REST API๋ผ๋ ๋จ์ด๋ฅผ ๋จ์ฉํ์ง ๋ง์.)
• REST ์ ์ฝ์ ๋ฐ๋ฅด์ง ๋ชปํ๋ค๋ฉด HTTP API ํน์ RPC-style API๋ก ๋ถ๋ฅด๋ ๊ฒ์ด ์ ํํ๋ค.
• REST๋ ๋จ์ํ URL ์ค๊ณ ๋ฐฉ์์ด ์๋๋ผ, "์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๋
๋ฆฝ์ ์งํ๋ฅผ ๋ณด์ฅํ๋ ์ค๊ณ ์ฒ ํ"์์ ๊ธฐ์ตํ์.
'๐ Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
A2A(Agent to Agent)๋? (0) | 2025.04.14 |
---|---|
MCP(Model Context Protocol)๋? (4) | 2025.04.11 |
Interpreter, Compiler์ ๋ํ์ฌ (0) | 2025.03.12 |
NUnit์ ๋ํ์ฌ (0) | 2025.03.08 |
Rendering์ ๋ํ์ฌ (0) | 2025.03.07 |