Skip to Content
Suffering builds character
아카이브20.spring HateoasHATEOAS1. HATEOAS 개요

1. HATEOAS 개요

1. HATEOAS

Hypermedia As The Engine Of Application State
애플리케이션의 상태를 전이, 관리하는 엔진 역할을 수행하는 하이퍼미디어

클라이언트는 하이퍼링크를 따라가며 서버가 제공한 링크에 따라 애플리케이션 상태를 전이해 나갈 수 있음

클라이언트가 서버의 응답 내 포함된 하이퍼미디어 링크를 통해 다음에 수행할 수 있는 행위를 안내하거나 가이드할 수 있는 정보나 상태를 의미함

💡
Tip

HATEOAS는 REST의 제약조건 중 하나로, REST 아키텍처의 창시자인 Roy Fielding의 논문에 명시되어 있음

정리하면,
API 응답 안에 현재 리소스와 관련된 URI와 전이 가능한 상태(action)에 대한 정보를 담아 클라이언트가 다음 요청을 스스로 구성할 수 있도록 해주기 위한 목적의 REST 아키텍처 설계 개념

1-1. HATEOAS가 적용되지 않은 예시

HATEOAS를 적용하지 않았을 경우, 다음의 제한점이 있음

  • 아래의 응답만으로는 클라이언트가 다음으로 수행 가능한 API를 통해 현재 사용자의 상태를 다른 상태로 변경할 수 있는지에 대한 정보를 알 수 없음
  • 따라서 API를 호출하는 클라이언트가 상태를 전이하기 위해서는 별도의 API 문서를 의존하거나 URI를 프로그램 코드에 하드코딩해야 함
JSON 응답 값
GET /orders/123 { "orderId": 123, "status": "CREATED", "total": 10000 }

1-2. HATEOAS가 적용된 예시

HATEOAS를 적용하였을 경우, 다음의 장점이 있음

  • 클라이언트는 응답에 포함된 링크를 통해 현재 상태에서 가능한 전이(예: 취소, 완료 API)를 알 수 있음
  • 서버는 비즈니스 로직에 따라 조건부로 링크를 포함할 수 있음(ex. 재고가 없을 경우 주문하기 링크 미포함)
JSON 응답 값
GET /orders/123 { "orderId": 123, "status": "CREATED", "total": 10000, "_links": { "self": { "href": "/orders/123" }, "cancel": { "href": "/orders/123/cancel" }, "complete": { "href": "/orders/123/complete" } } }
Last updated on