Hateoas의 개념에 대해서 알아보고, Spring에서 어떻게 구현하는지에 대해서 알아보겠다.
REST API에는 등급이 존재한다.
REST API의 등급 중 가장 높은 등급이 Hateoas라고 보면된다.
아래 표를 살펴보면, 일반적인 프로젝트에서는 구현하는 Rest API의 레벨은 Lvl2라고 보면된다.
Lvl2는 Resources와 HTTP메서드를 사용한다.
Lvl3, Hateoas는 Lvl2에 추가적인 Link를 가지고 있다. 이 Link를 통해 네비게이션이 가능하다.
Request를 보면, Lvl2와 별 차이가 없어 보이지만, Response를 보면 JSON에 HAL라는 추가적인 링크가 있는 것을 알 수 있다.
=> 완벽한 RestApi를 사용하기 위해서는 Hateoas를 사용해야 한다.
Hypermedia As The Engine Of Application State - HATEOAS 란?
- Hypermedia : Data + Links
- level 2에서는 Data Content부분만 전달해주었지만, Hateoas에서는 Links가 추가 되었다.
- 연관된 링크도 응답(Response)으로서 함께 담아서 보내주는 개념이라고 보면된다.
- 추가적인 Action들이 링크로 제공되어 있어서, Application에서 어떤 서비스를 해주는지 한눈에 볼 수 있다는 장점.
그렇다면, Hateoas의 궁극적인 목표는 무엇인가?
"높은 수준에서 Client와 Server를 분리시키는 것, 의존성을 줄여 Client와 Server각각 독립적으로 개발하는 것을 목적으로 한다. "
Client입장에서는 Server에서 url을 바뀌어도 이름("self", "director_movies" ... )을 통해 접근을 하기 때문에 전혀 영향이 없다. 따라서 Client, Server가 각각 개발이 진행이 될 수 있는 것이다.
Hypermedia를 표현하는 방식 : HAL(Hypertext Application Language) Model
아래 그림과 같이 HAL로 표현한다.
resources의 properties, Links(rel / href)로 구성되고, embedded resources가 있으면 거기에서 다시 HAL로 표현된다.
Hateoas의 장점
- 서버에서 url를 변경해도 client에 영향이 없음.
- api를 제공할때 사용자에게 documentation 제공할 수 있음. (자동으로 documentation을 제공)
- Front단에서 link가 있느냐 없느냐에 따라서, 다양한 UI에 사용할 수 있음(예를 들면 link가 없으면 버튼을 disabled하는것)
Hateoas의 단점
- 전달되는 data크기가 커져서 네트워크 오버헤드가 생김
- 링크가 많아 복잡해짐
'Backend > Spring & SpringBoot' 카테고리의 다른 글
Spring Boot Test하기 [1] (0) | 2022.05.08 |
---|---|
Hypermedia-Driven RESTful Web Services : Spring HATEOAS 구현방법 [2] (0) | 2022.04.18 |
[Spring Security] Spring Boot에서 Spring Security 설정하기 (Database) (0) | 2022.04.13 |
[Spring Security] Spring Boot에서 Spring Security 설정하기 (in-memory) (0) | 2022.04.12 |
[WEB] URI 규칙 10가지 (0) | 2022.03.09 |