2021. 8. 26. 08:00ใ์ด๋ก ์ ๋ฆฌ/Web
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
๋ณธ ๋ด์ฉ์ ์ฃผ๋ํ๋์ด Web ๊ฐ๋ฐ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๋์ ํ๋ ๊ธฐ์ ๋ค์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ๊ณณ ์ ๋๋ค!
์ด ๊ธ์ ํจ๊ป ํ๋ก์ ํธ ํ๋ Back End ๊ฟ๋๋ฌด Crew๊ฐ ์์ฑํ ๊ฒ์ด์์.
์ฃผ๋ํ๋๋ Back End ๊ฐ๋ฐ์ ๋งก์์๋ต๋๋ค!
์ด๋ฒ ์ฐ๋๋ (์ฐ๋ฆฌ๋ ๋ ์!) ํ๋ก์ ํธ์์๋ RESTfulํ API๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ๊ทธ๋ฐ API๋ก ๊ด์ฐฎ์๊ฐ
( https://www.youtube.com/watch?v=RP_f5dMoHFc )๋ผ๋ ์ธ๋ฏธ๋ ์์์ ๋ณด๋ฉฐ REST์ ์ถํ ๊ณ๊ธฐ์ REST์์ ์ ์ํ ์ ์ฝ ์กฐ๊ฑด๋ค์ ์์๋ณด์๊ณ , ์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ผ API๋ฅผ ์ค๊ณํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
๐ RESTfulํ API๋ฅผ ์ค๊ณํ๊ณ ์ ํ ์ด์ ?
๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํคํ ์ฒ ์คํ์ผ์ธ REST๋ฅผ ๊ตฌ์ฑํ๋ ์คํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Client-Serve
- Stateless
- Cache
- Uniform Interface
- Layered System
- Code-on-Demand (optional)
HTTP ํ๋กํ ์ฝ๋ง ์ ๋ฐ๋ผ๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์คํ์ผ๋ค์ ๋ค ์งํฌ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์ง๋ง, Uniform Interface์ ๋๋ถ๋ถ ์ ์ง์ผ์ง์ง ์๊ณ ์์ผ๋ฉฐ ์ด ์คํ์ผ์ด ์ง์ผ์ง์ง ์๋๋ค๋ฉด RESTfulํ API๋ผ๊ณ ํ ์ ์์ต๋๋ค. REST๊ฐ ๋ชฉ์ ํ๋ ๋ฐ๋ ๋ ๋ฆฝ์ ์ธ ์งํ *์ด๊ณ , ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด์๋ Unifrom Interface๊ฐ ํ์์ ์ ๋๋ค.
๋ ๋ฆฝ์ ์งํ * - ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์งํํ๋ค. - ์๋ฒ์ ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ๋์ด๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์๋ค.
๊ทธ๋ฌ๋ ์ฌ์ค ์ฐ๋ฆฌ๊ฐ REST API๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ๋ค์ ์ ์ฝ ์กฐ๊ฑด์ ์ ์งํค์ง ๋ชปํ๊ณ ์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฒ ํ๋ก์ ํธ์์๋ Uniform Interface ์ค์์๋ ๋๋ถ๋ถ ์ ์ง์ผ์ง์ง ์๊ณ ์๋ ์ ์ฝ ์กฐ๊ฑด ์ค ํ๋์ธ Hypermedia as the engine of application state(HATEOAS)์ ์ง์ผ REST API๋ฅผ ์ค๊ณํ๊ณ ์ ํ์ต๋๋ค.
๐ช๐ปRESTfulํ API ์ค๊ณ๋ฅผ ์ํ ๋ ธ๋ ฅ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ Hyperlink๋ฅผ ์ด์ฉํด ์ ์ด๋์ด์ผ ํ๋ค๋ ๊ฒ์ด HATEOAS ์ ์ฝ ์กฐ๊ฑด์ ๋๋ค. Hyperlink์ ์์์ ์์น(reference)์ ์์์ ๊ด๊ณ(relation)๋ฅผ ๋ช ์ํด์ค์ผ๋ก์จ ํด๋ผ์ด์ธํธ๊ฐ ๋ณ๋์ ์ฌ์ ์ ๋ณด ์์ด๋ ์ด ๋งํฌ๋ฅผ ์ด์ฉํด ๋ค๋ฅธ ์์์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๋ ๋ฆฝ์ ์งํ๊ฐ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์คํ๋ง์์๋ ์ด๋ฅผ ์ํด Spring HATEOAS๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Spring HATEOAS์์๋ Link๋ผ๋ ํด๋์ค๋ก ๋ค๋ฅธ ์์์ ์ ๊ทผํ ์ ์๋ ๋งํฌ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํ์ฉํ์ฌ ์์์ ํํํ๋ ค๋ฉด RepresentationModel ํด๋์ค๋ฅผ ์์ํ๋ EntityModel ํ ํ๋ฆฟ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
RepresentationModel ํด๋์ค๋ Link ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์๊ณ EntityModel ํด๋์ค์์๋ ํด๋น ๋งํฌ๋ฅผ ๊ฐ์ง ์์ ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์๋๋ฐ Spring HATEOAS์์๋ ์ด EntityModel์ ์ด์ฉํ์ฌ ์๋ต์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์บก์ํํ๊ณ ๋งํฌ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ฌ ์ ๊ทผํ ์ ์๋ ์์์ ๋ช ์ํ๋ RESTful ํ ์๋ต์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ EntityModel์ ์ด์ฉํ์ฌ ์๋ต์ ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์บก์ํํ๋ ๊ณผ์ ์ ๋งค๋ฒ ์ผ์ผ์ด ์ฝ๋๋ก ์์ฑํด์ผ ํ ๊น์?
์ด๋ ๊ฒ ๋์ผํ ์ฝ๋๊ฐ ๋ฐ๋ณต๋๋ค๋ฉด ์ด๋ฅผ ๋ณ๋์ ํจ์๋ ํด๋์ค๋ก ๋นผ๋ด๋ ๊ฒ๋ ์๊ฐํด๋ณด์์ผ ํฉ๋๋ค. ๊ทธ๋์ ์ ํฌ๋ ์ด๋ฒ ํ๋ก์ ํธ์์ Spring HATEOAS์์ ์ ๊ณตํ๋ RepressentationModelAssembler ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํด๋ณด์์ต๋๋ค.
์ด ์ธํฐํ์ด์ค๋ toModel, toCollectionModel ๋ฉ์๋๋ง ์ ์ํ๊ณ ์์ต๋๋ค. ๋ง ๊ทธ๋๋ก ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๊ฐ์ฒด๋ฅผ RepresentationModel๋ก ๋ณํํ๋ ์ญํ ์ด๊ณ , ์์ ์ฌ์ฉํ๋ EntityModel์ด ์ด RepresentationModel์ ์์๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ค์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐๐ป ๊ฒฐ๋ก
REST API์ ๋ํด์ ๋ง์ด ๋ค์ด๋ณด๊ธด ํ์ง๋ง ์ ์ REST API๊ฐ ๋ฌด์์ธ์ง, RESTfulํ๊ฒ API๋ฅผ ์ค๊ณํ๋ฉด ๋ญ๊ฐ ์ข์์ง์ ๋ํด์๋ ๋ชจ๋ฅด๊ณ ์์์ต๋๋ค. ์ด๋ฒ ๊ธฐํ์ REST์ ์ถํ ๊ณ๊ธฐ์ ๋ช๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด๋ค์ ๊ณต๋ถํด๋ณด๋ฉด์ ๊ทธ๋ฅ API๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์ง์ผ์ผ ํ ๊ฒ๋ ๋ง๊ณ , ์กฐ๊ธ์ ๋ ๋ณต์กํ๊ฒ ๋๊ปด์ง์๋ ๋ถ๊ตฌํ๊ณ REST API๋ฅผ ์ค๊ณํ๋ ์ด์ ๋ฅผ ์กฐ๊ธ์ ์ง์ํด๋ณผ ์ ์์์ต๋๋ค.
REST๋ ์์ญ๋ ์ ๋ฌํ๋ ๊ธด ์๊ฐ์ ๊ฑธ์ณ ์งํํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ฒ์ ๋๋ค. ๋น์ฅ ์ฝ๋๋ฅผ ์งค ๋์๋ ์ด๋ ๊ฒ ํ๋ ๊ฒ์ด ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ์ด๋ ต๋ค๊ณ ๋๊ปด์ง ์๋ ์์ง๋ง ์ฅ๊ธฐ๊ฐ ์๋น์คํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ , HTTP, HTML๊ณผ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ๋ค์ด ๋ณ๊ฒฝ๋๋ค๊ณ ํด๋ ๋ฐ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ด ๋ ๋ฆฝ์ ์งํ๊ฐ ๊ฐ๋ฅํ๋๋ก ํ๋ REST๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ๋ ์ข๋ค๊ณ ์๊ฐ ๋ฉ๋๋ค.
์ด๋ ๊ฒ REST๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ ์ฅ๋จ์ ์ ์ ๊ณ ๋ คํ์ฌ REST๋ฅผ ๋ฐ๋ฅผ ๊ฒ์ธ์ง๋ ๊ตฌํํ๋ ค๋ ์๋น์ค์ ๋ชฉ์ ์ ๋ง์ถฐ ํ๋จํ์ฌ ํฉ๋ฆฌ์ ์ผ๋ก ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์ํ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ์ต๋๋ค.
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'์ด๋ก ์ ๋ฆฌ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] URL์ ์ดํด (0) | 2022.04.05 |
---|