Spring HATEOAS
Last updated
Last updated
Hypermedia As The Engine Of Application State์ ์ฝ์๋ก ํ์ดํผ ๋งํฌ๋ฅผ ํตํด ์ํ ์ด๋์ด ์ผ์ด๋์ผ ํ๋ค๋ ์กฐ๊ฑด์ ๋ง์กฑํ๊ธฐ ์ํด ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
response body์ ๋งํฌ๋ฅผ ์ ๊ณตํ์ฌ client๊ฐ ์ฐธ๊ณ ํ ์ ์๋๋ก ํ๋ ๊ฒ
๋งํฌ๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ
๋ฌธ์์ด ๊ฐ์ง๊ณ ๋ง๋ค๊ธฐ
์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ก ๋ง๋ค๊ธฐ
๋ฆฌ์์ค๋ฅผ ๋ง๋๋ ๊ธฐ๋ฅ
๋ฆฌ์์ค : ๋ฐ์ดํฐ + ๋งํฌ
๋งํฌ ์ฐพ์์ฃผ๋ ๊ธฐ๋ฅ
: HAL ์คํ์ผ์ ๋งํฌ๋ ์ฐ์์ ์ผ๋ก ๋งํนํ์ฌ ์์์ ์ฐพ์ ์ ์์ฐ๋ง ๋จ๊ณ๊ฐ ๋ง์ ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์, ์๋์ผ๋ก ๋งํฌ๋ฐ๋ผ ์ํํ๋ฉฐ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์๋๋ nodejs์ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ๋ก ์ด๋ฅผ ์๊ฐ๋ฐ์ spring์์ ์ ์ํ์ฌ ์ง์
: spring HATEOASํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํด๋์ค๋ก ๋งํฌ๋ฅผ ์ํํ๋ฉฐ ์ ์ ํ ๋งํฌ๊ฐ ์๋์ง ์ฐพ๊ธฐ ์ํด ๋ฏธ๋์ด ์ ํ์ด ๋ถํฉํ์ง ๋ฑ ์ฒดํฌํ๋ ๋ฉ์๋๋ค์ด ์กด์ฌํ๋ค.
href (์ฃผ์)
rel (๊ด๊ณ)
self
profile
...(์ ๋ฏธ๋ฆฌ ์ ์๋ ๋งํฌ ๊ด๊ณ๊ฐ ์กด์ฌ,๋ค์ํ๋ฉฐ ๊ฐ์ธ์ ์ ์ ๊ฐ๋ฅ => restfulํ api๋ ํ์ค์ด ์กด์ฌํ์ง ์๊ธฐ๋๋ฌธ์ ์ ์ํ์ฌ ์ฌ์ฉ๊ฐ๋ฅ)
udpate-event
query-events
Spring ์ด๋ผ๋ฉด @EnableHypermediaSupport๋ฅผ ์ฌ์ฉํด์ผํ์ง๋ง, Spring boot๋ผ๋ฉด hateoas๋ง dependecny์ถ๊ฐํ๋ฉด ์๋์ผ๋ก ์ค์ ์ด ๋๋ค.
๋งํฌ๋ Link
๋ฅผ ํตํด ์์ฑ์ด ๊ฐ๋ฅํ๋ฉฐ href์ rel๋ฑ์ ์ฌ์ค์ ์ด ๊ฐ๋ฅํ๊ณ ๋งํฌ ๊ด๊ณ(rel)์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ self
๋ก ์๊ธฐ์์ ์ ์ฐธ์กฐํ๋ค.
linkTo : ์ปจํธ๋กค๋ฌ ํด๋์ค
์ ๋งคํ ์ด๋
ธํ
์ด์
์ ๊ฒ์ฌํ์ฌ ๋ฉ์๋์ ๋งคํ๋ URI๋ฅผ ๋น๋ํ๋ ํจ์
methodOn : ํด๋์ค๊ฐ ์๋ ๋ฉ์๋์ ๋งคํ๋ URI๋ฅผ ๊ฒ์ฌํ์ฌ ๋น๋ (๋ฉ์๋๋ฅผ ํด๋์ค๋ก wrap)
์์ ๊ฐ์ด ํด๋์ค์ ๋งคํ๋ URI๊ฐ ์๋ ํด๋์ค ๋ด์ ๋ฉ์๋์ URI์ ๋งคํํ์ฌ ์ฌ์ฉํ๊ธฐ ์ํด methodOn()
์์ ํด๋์ค๋ฅผ ์ฃผ๊ณ ํด๋น ํด๋์ค ๋ด์ ๋ฉ์๋์ ์ด๋
ธํ
์ด์
์ ๋ณด๋ก linkTo
๋ฅผ ์ํํ๋ค.
slash : /
, #
๊ณผ ๊ฐ์ slash์ ๋ค์ ํ๋ผ๋ฏธํฐ๋ฅผ uri์ ๋ถ์ฌ์ฃผ๋ ํจ์