네트워크/HTTP

RESTful API와 HTTP: HATEOAS (Hypermedia as the Engine of Application State)

shimdh 2025. 3. 7. 09:28
728x90

REST(Representational State Transfer)는 웹 애플리케이션에서 클라이언트와 서버 간의 상호작용을 단순화하고 확장성을 극대화하는 웹 아키텍처 스타일입니다. RESTful API는 이러한 원칙을 기반으로 설계된 API이며, 이를 통해 자원을 관리하고 조작할 수 있습니다.

이 중에서도 HATEOAS(Hypermedia as the Engine of Application State) 는 RESTful API의 중요한 개념 중 하나로, 클라이언트가 API 응답에 포함된 하이퍼링크를 통해 애플리케이션 상태를 동적으로 탐색할 수 있도록 지원하는 방식을 의미합니다.


1. HATEOAS란?

HATEOAS는 RESTful API에서 서버가 클라이언트에게 단순한 데이터만 제공하는 것이 아니라, 추가적인 작업을 수행할 수 있는 링크(hypermedia)를 포함하여 응답하는 원칙입니다.

즉, 클라이언트는 특정 API 엔드포인트에 대한 사전 지식 없이도 응답 내 포함된 링크들을 활용하여 서버와 상호작용할 수 있습니다.


HATEOAS의 필요성

기존의 RESTful API에서는 클라이언트가 API의 동작 방식을 사전에 알고 있어야 합니다. 즉, 어떤 엔드포인트가 어떤 역할을 하는지 문서를 참고해야 하는 불편함이 있습니다.

그러나 HATEOAS를 활용하면 서버가 직접 클라이언트에게 가능한 작업들을 명시해주므로, 클라이언트가 API의 내부 동작을 몰라도 필요한 기능을 탐색하고 사용할 수 있게 됩니다.

HATEOAS의 주요 장점:

  • API의 유연성 향상 → 클라이언트가 특정 동작을 수행하기 위해 엔드포인트 목록을 미리 알 필요가 없음
  • 문서 의존성 감소 → API 문서를 따로 찾아보지 않아도, 응답 내 링크를 참고하여 필요한 작업 수행 가능
  • 버전 관리가 용이 → URL 구조가 변경되더라도 클라이언트는 응답 내 포함된 링크를 활용하여 정상적으로 API를 이용할 수 있음

2. HATEOAS의 작동 방식

HATEOAS를 적용한 RESTful API는 다음과 같은 방식으로 동작합니다.

1) 클라이언트의 첫 번째 요청

클라이언트는 특정 엔드포인트에 GET 요청을 보냅니다.

예제 요청:

GET /products/123 HTTP/1.1
Host: api.example.com

2) 서버의 응답

서버는 단순히 제품 정보를 반환하는 것이 아니라, 해당 리소스와 관련된 추가적인 행동을 수행할 수 있는 링크를 포함하여 응답합니다.

예제 응답 (HATEOAS 적용):

{
    "id": 123,
    "name": "무선 이어폰",
    "price": 120000,
    "_links": {
        "self": { "href": "https://api.example.com/products/123" },
        "add_to_cart": { "href": "https://api.example.com/cart/add/123", "method": "POST" },
        "related_products": { "href": "https://api.example.com/products?category=earphones" }
    }
}

응답 내 포함된 링크 설명:

  1. "self" → 해당 제품의 상세 정보를 다시 조회할 수 있는 URI
  2. "add_to_cart" → 해당 제품을 장바구니에 추가할 수 있는 URI
  3. "related_products" → 같은 카테고리에 속한 다른 제품 목록을 확인할 수 있는 URI

3) 클라이언트의 추가 요청

이제 클라이언트는 별도의 문서 참고 없이 서버의 응답에서 제공된 링크를 활용하여 추가 작업을 수행할 수 있습니다.

장바구니에 추가 요청:

POST /cart/add/123 HTTP/1.1
Host: api.example.com

관련 상품 조회 요청:

GET /products?category=earphones HTTP/1.1
Host: api.example.com

즉, 클라이언트는 API의 내부 동작을 미리 알 필요 없이, 응답에 포함된 링크만 따라가면서 필요한 기능을 사용할 수 있습니다.


3. HATEOAS 적용 사례

HATEOAS는 다양한 웹 애플리케이션에서 활용될 수 있습니다.

🔹 쇼핑몰 API:

  • 사용자가 특정 상품을 조회하면, 해당 상품을 장바구니에 추가하거나, 관련 상품을 추천하는 링크를 제공

🔹 소셜 네트워크 API:

  • 사용자가 친구 목록을 조회하면, 각 친구 프로필을 조회하거나 친구 요청을 보낼 수 있는 링크를 함께 제공

🔹 온라인 예약 시스템:

  • 사용자가 항공권을 조회하면, 해당 항공편을 예약하거나, 대체 항공편을 조회할 수 있는 링크를 제공

4. HATEOAS의 단점 및 고려 사항

🚨 HATEOAS의 한계점

1️⃣ 응답 크기 증가

  • 응답 내에 추가적인 링크가 포함되므로, 데이터 크기가 증가하여 네트워크 트래픽이 증가할 가능성이 있음
  • 하지만 JSON이나 XML을 활용한 경량화된 응답을 설계하면 최소한의 오버헤드로 활용 가능

2️⃣ 초기 구현 난이도

  • 기존의 RESTful API보다 추가적인 링크 제공 로직을 서버에서 관리해야 하므로 개발 난이도가 다소 증가
  • 하지만 일관된 패턴을 설정하면 관리가 용이하며, API 사용성이 높아짐

5. 결론

HATEOAS는 RESTful API에서 클라이언트가 서버의 구조를 미리 알지 못하더라도, 응답 내 제공된 링크를 통해 자연스럽게 애플리케이션을 탐색하고 상호작용할 수 있도록 돕는 강력한 개념입니다.

핵심 요약:

  • HATEOAS는 API 응답에 관련 리소스와 추가적인 행동을 위한 링크를 포함하는 방식
  • 클라이언트는 별도의 문서 없이 서버가 제공하는 링크를 따라 필요한 기능을 수행할 수 있음
  • API의 확장성과 유지보수성을 크게 향상시키며, 클라이언트와 서버 간의 결합도를 낮추는 효과

RESTful API를 설계할 때 HATEOAS를 적용하면 더 직관적이고 확장성 있는 API 구축이 가능하며, 궁극적으로 사용자 경험을 더욱 향상시킬 수 있습니다. 🚀

728x90