HATEOAS
RESTful API๋ฅผ ์ค๊ณํ ๋, RMM (Richardson Maturity Model) ๋จ๊ณ๋ฅผ ๋ฐ๋ผ์ API๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
REST API๋ฅผ ์ค๊ณํ ๋, ๋ ๋ฒจ ๋จ๊ณ๋ฅผ ๋ฐ๋ผ์ API๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
Level 0 : The Swamp of POX
์๋ฒ์ ๋ฆฌ์์ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์น ์๋น์ค ํํ๋ก ์ ๊ณตํ๊ธฐ ์ํด ๋จ์ URI ๋งคํ ํํ๋ง ๊ฐ์ง๋ค.
http://domain/deleteArticles
Level 1 : Resources
์๋ฒ์ ์์์
๋ฆฌ์์ค (์๋ฒ๊ฐ ์ ๊ณตํ๋ ์๋ฃ)ํํ ์ ์๋ ๋จ๊ณ๋ฅผ ์๊ธฐํ๋ค.์ธ๋ถ๋ก ๊ณต๊ฐํ๊ณ ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ์ข ๋ ์๋ฏธ์๋ URI๋ก ํํํ๋ค.
POST์ ๊ฐ์ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ณ ๋ชจ๋ ๋ฐํ ์ฝ๋๋ฅผ 200OK๋ก, ๋จ์ ์ผ์ด์ค๋ก ๋ฐํํ๋ค.
http://domain/article/1
Level 2 : HTTP Verbs
HTTP ์ํ์ฝ๋, ๋ฉ์๋ ๋ฑ์ ์ ์ ํ ์ด์ฉํด์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ์ ์๋ ๋จ๊ณ์ด๋ค.
HTTP ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉ ๋ฐ ์ ์ ํ URI, ์๋ํฌ์ธํธ, ์ํ์ฝ๋ ์ ์ด
Level 1์์ ์ ์ํ๋ ๋ฐฉ๋ฒ + HTTP Methods์ ๋ง๊ฒ ์ค๊ณํ๋ค.
๋ฆฌ์์ค์ ์ํ๊ฐ ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๊ธฐ ํํ๋ฉด GET์ ์ฌ์ฉํ๋ค๋ ๊ฐ.
HTTP์์ ์ฌ์ฉํ๋ Method๋ฅผ ๊ฐ์ง๊ณ API๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉ
๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ CRUD๋ฅผ ์ด์ฉํด ์๋น์คํจ
๋น์ทํ URI๊ฐ ๋ฐ์ํ๋ค ํ๋๋ผ๋ HTTP Method์ ๋ฐ๋ผ์ ์ํ๋ ์๋น์ค๋ฅผ ๋ถ๋ฅํ ์ ์๋ค.
Level 3 : Hypermedia Controls
HATEOAS ๊ธฐ๋ฅ์ ์ฐ๊ฒฐ๋์ด ์๋ ๋จ๊ณ๋ฅผ ์๊ธฐํ๋ค.
Level 2 + HATEOAS
๋ค์ ์์ ์ผ๋ก ์ด๋ค๊ฒ์ ํ ์ ์๋์ง, ํ์ฌ ์์ ์์ ํ ์ ์๋ ํ๋๋ค์ด ์ด๋ค๊ฒ์ด ์๋์ง, ํด๋น ์์ ์ ํตํด ๋ค๋ค์ง ์ ์๋ ์์ ์ด ์ด๋ค๊ฒ๋ค์ด ์๋์ง ์ ๊ณต
์๋ฒ์ ๋ค์ ๋์์ ๋ฏธ๋ฆฌ ์๋ ค์ค ์ ์๋ค.
spring์์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
org.springframework.boot:spring-boot-starter-hateoas
HATEOAS
HATEOAS๊ฐ ๋งํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
Hypermedia (๋งํฌ)๋ฅผ ํตํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ ์ด๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค.Hypermedia์ ์๊ธฐ ์์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์ผ ํ๋ค.
์ฆ, ํ์ฌ ๋ฆฌ์์ค์ ์ฐ๊ด๋ (ํธ์ถ ๊ฐ๋ฅํ) ์์ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
๐ค ๊ทธ๋ผ ์ํ ์ ์ด? ์ด๊ฒ ๋ฌด์จ ์๋ฏธ์ผ๊น.
GET https:*//my-server.com/article*
์๋ฅผ ๋ค์ด์ ๊ฒ์๊ธ์ ์กฐํํ๋ URI๊ฐ ์กด์ฌํ ๋, ๊ธ์ ์กฐํํ ์ฌ์ฉ์๋ ๋ค์ ํ๋์ผ๋ก ๋ฌด์์ ํ ๊น?
๋ค์ ๊ฒ์๋ฌผ์ ์กฐํ
์ด์ ๊ฒ์๋ฌผ ์กฐํ
๋๊ธ ๋ฌ๊ธฐ
์ด๋ฌํ ํ๋๋ค์ด ๋ฐ๋ก ์ํ ์ ์ด๊ฐ ๊ฐ๋ฅํ ๊ฒ๋ค์ธ๋ฐ, ์ด๋ฐ๊ฒ์ โ์๋ต ๋ณธ๋ฌธโ์ ๋ฃ์ด์ค์ผ ํ๋ค.
๋ฐ๋ก Hypermedia (๋งํฌ)๋ฅผ ํตํด ๋ฃ์ด์ค๋ค.
์ด๋ฅผ ํตํ ์ด์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
API ๋ฒ์ ์ ๋ช ์ํ์ง ์์๋ ๋๋ค.
๋งํฌ ์ ๋ณด๋ฅผ ๋์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค.
๋งํฌ๋ฅผ ํตํด ์ํ ์ ์ด๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
์ด๊ฒ ๋ฐ๋ก Uniform Interface ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑ์ํค๋ REST API๋ผ๊ณ ํ ์ ์๋๊ฒ์ด๋ค.
ํ์ง๋ง โHAL JSONโ์ ์ด์ฉํ๊ธฐ ์ ๊น์ง ์๋ฒฝํ์ง ์๋ค.
HAL
Hypertext Application Language ์ผ๋ก JSON, XMl ์ฝ๋ ๋ด์ ์ธ๋ถ ๋ฆฌ์์ค์ ๋ํ ๋งํฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํ ํน๋ณํ ๋ฐ์ดํฐ ํ์ ์ด๋ค.
HAL์ ๋ ๊ฐ์ ํ์ ์ ๊ฐ๋๋ค.
application/hal+jsonapplication/hal+xml
์ด HAL ํ์ ์ ์ด์ฉํ๋ค๋ฉด ์ฝ๊ฒ HATEOAS๋ฅผ ๋ฌ์ฑํ ์ ์๋ค.
HAL ํ์ ์์๋ ๋ ๊ฐ์ง(๋ฆฌ์์ค, ๋งํฌ)์ ํน์ง๋ง ์ด์ฉํ๋ฉด ๋๋ค.
๋ฆฌ์์ค : ์ผ๋ฐ์ ์ธ data ํ๋
๋งํฌ : Hypermedia๋ก _self ํ๋๊ฐ ๋งํฌ์ ํฌํจ๋๋ค.
์ฐธ๊ณ : https://wonit.tistory.com/454
Last updated