본문 바로가기

Backend/Spring & SpringBoot

Hypermedia-Driven RESTful Web Services : HATEOAS란? [1]

728x90

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를 사용해야 한다. 

Rest API 레벨


Hypermedia As The Engine Of Application State - HATEOAS 란? 

- Hypermedia : Data + Links

- level 2에서는 Data Content부분만 전달해주었지만, Hateoas에서는 Links가 추가 되었다. 

- 연관된 링크도 응답(Response)으로서 함께 담아서 보내주는 개념이라고 보면된다. 

- 추가적인 Action들이 링크로 제공되어 있어서, Application에서 어떤 서비스를 해주는지 한눈에 볼 수 있다는 장점. 

 

Hateoas의 예시

 

그렇다면, 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로 표현된다. 

HAL Model


Hateoas의 장점

- 서버에서 url를 변경해도 client에 영향이 없음.

- api를 제공할때 사용자에게 documentation 제공할 수 있음. (자동으로 documentation을 제공)

- Front단에서 link가 있느냐 없느냐에 따라서, 다양한 UI에 사용할 수 있음(예를 들면 link가 없으면 버튼을 disabled하는것) 

Hateoas의 단점

- 전달되는 data크기가 커져서 네트워크 오버헤드가 생김

- 링크가 많아 복잡해짐 


 

 

Spring HATEOAS

Commercial support Business support from Spring experts during the OSS timeline, plus extended support after OSS End-Of-Life. Publicly available releases for critical bugfixes and security issues when requested by customers.

spring.io

 

728x90