본문 바로가기
백엔드/Spring

[Spring] Spring HATEOAS란

by 작은소행성 2023. 8. 10.

HATEOAS란 

Hypermedia As The Engine Of Application State 약자로 REST API의 필수 구성요소 중 하나이다. 

 

Spring HATEOAS 는 스프링 프로젝트중에 하나인데 

이 프로젝트의 목적은  REST API를 보다 쉽고 편리하게 사용할 수 있게 일종의 툴을 제공해주는 프레임워크이다. 

 

REST API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는것을 의미하는데 

이러한 방법은 특정 API 요청 시 어떠한 행동을 할 수 있는지 URL을 전달하여 클라이언트가 참고해 사용할 수 있고 리소스 정보 뿐만 아니라 리소스 상태에 따라 다양한 링크 정보가 바뀌며 동적으로 리소스를 구성한다. 

 

즉, 높은 수준에서 클라이언트와 서버를 분리시키고, 의존성을 줄여 각각 독립적으로 개발하는 것을 목적으로 하는 것이다. 

 

 

REST API에는 등급이 존재하는데 가장 높은 등급이 HATEOAS라고 보면 된다. 

https://dev.to/rafaeljcamara/rest-api-maturity-levels-41ec

레벨별 자세한 설명은 이미지를 가져온 링크에서 확인하면 된다. 

 

 

HATEOAS 장점 

서버에서 URL을 변경해도 클라이언트에 영향이 없고 

프론트단에서 Link의 유무에 따라서 다양한 UI를 사용할 수 있다. 

 

HATEOAS 단점 

링크가 많아지면 복잡해지고 전달되는 데이터의 크기가 커서 네트워크 오버헤드가 발생할 수 있다. 

 

 

 

예제

아래 내용은 Spring 에서 제공하는 예제의 일부분이다.  

해당 구조는 Hypertext Application Language 의 코드이다. 

{
  "content":"Hello, User!",
  "_links":{
    "self":{
      "href":"http://localhost:8080/greeting?name=User"
    }
  }
}

http 응답에 들어갈 Resources와 다른 상태나 리소스에 접근할 수 있는 링크를 제공한다. 

위의 _links에 다양한 링크를 넣어 응답값으로 사용할 수 있다. 

 

 

HATEOAS 에 대해 검색하면 많은 사람들이 구현 방법에 대해 작성한 것을 볼 수 있다. 

나는 구현이 목적이 아닌 해당 내용의 개념이 궁금해서 작성한것으로

예제는 다른사람들의 글이나 깃에서 참고해서 보면 좋을 것 같다. 

 

 

참고

spring docs
https://docs.spring.io/spring-hateoas/docs/current/reference/html/#fundamentals.representation-models

 

spring guide

https://spring.io/guides/gs/rest-hateoas/

 

Git 
https://github.com/spring-projects/spring-hateoas-examples

 

Hypertext Application Language

https://en.wikipedia.org/wiki/Hypertext_Application_Language

반응형