API(Application Programming Interface)는 애플리케이션 간 소통을 위한 인터페이스
REST API는 REST 원칙을 따르는 API로, HTTP를 사용해 리소스(데이터)를 주고받는 방식의 API
REST는 Representational State Transfer의 약자로,
웹에서 자원을 효율적이고 일관되게 다루기 위한 아키텍처 스타일
REST API의 핵심 구성 요소와 REST의 5가지 원칙과 이유, 그리고 HATEOAS를 정리
/products, /users/1/ordersGET: 데이터 조회POST: 데이터 생성PUT: 데이터 수정DELETE: 데이터 삭제200 OK, 404 Not Found 등)를 함께 포함→ 프론트엔드(React, Vue)와 백엔드(Spring, Node.js)를 분리
→ 서버는 데이터만 반환하고, UI는 클라이언트가 구성
이점
세션 방식: 매 요청마다 Redis나 DB에서 세션 조회 필요
JWT 방식: 서버가 토큰 디코딩만으로 인증 가능
→ 클라이언트는 요청마다 필요한 정보를 다 포함해서 보낸다
HTTP는 본질적으로 stateless이므로, HTTP를 사용하면서 세션을 사용하지 않으면 구현 가능
예시:
GET /news
Cache-Control: max-age=3600
→ 1시간 동안 캐시 유지
→ 브라우저나 CDN에 저장되어 서버 부하 감소
→ HTTP GET은 기본적으로 캐싱을 지원
장점
예시:
규칙
_ 대신 - 사용예시
/products/1HATEOAS (Hypermedia As The Engine Of Application State)
“API 응답 안에 현재 상태에서 가능한 다음 행동 링크들을 포함하자”
{
"id": 1,
"name": "상품 A",
"status": "NEW",
"_links": {
"self": { "href": "/products/1" },
"update": { "href": "/products/1", "method": "PUT" },
"delete": { "href": "/products/1", "method": "DELETE" }
}
}
→ 클라이언트는 상품 상태가 NEW일 때 update, delete가 가능함을 알 수 있다
→ 서버가 상태 전이에 따른 행동을 명시적으로 안내
// 일반적인 클라이언트 처리 예시
if (order.status === "NEW") {
showPayButton();
showCancelButton();
} else if (order.status === "PAID") {
showShipButton();
}
// HATEOAS 방식
if (order._links.pay) showPayButton();
if (order._links.cancel) showCancelButton();
if (order._links.ship) showShipButton();
→ 클라이언트는 서버의 로직을 구현하지 않아도 된다
→ 링크 존재 여부만으로 기능 수행 가능
→ 상태 기반 로직의 클라이언트 종속을 줄일 수 있다
기존
GET /products/42/reviews
변경
GET /items/42/feedback
{
"id": 42,
"name": "상품 A",
"_links": {
"self": { "href": "/products/42" },
"reviews": { "href": "/items/42/feedback" }
}
}
const reviewsUrl = response._links.reviews.href;
fetch(reviewsUrl).then((res) => res.json()).then(...);
→ 클라이언트는 URI를 외우거나 문서로 학습하지 않아도 됨
→ 서버가 알려주는 링크만 따라가면 됨
→ 유지보수가 쉬워지고, 유연성이 높아짐
| 장점 | 설명 |
|---|---|
| 상태 기반 UI 처리 | 현재 상태에 따라 가능한 행동을 응답에 포함시켜 클라이언트가 유연하게 처리 |
| 서버 주도 흐름 제어 | 클라이언트가 로직을 몰라도 서버가 안내하는 링크만 따라가면 됨 |
| 유지보수성 향상 | API 경로가 바뀌어도 클라이언트는 링크만 따라가므로 수정이 적음 |
| 자동 탐색 가능 | 문서 없이도 클라이언트 또는 자동화 도구가 API를 탐색 가능 |
RESTful API는 명확한 원칙을 기반으로 설계되고,
HATEOAS는 그 위에 더 유연하고 확장 가능한 API를 만드는 방법이다.
작은 프로젝트에서는 HATEOAS가 필요 없을 수도 있지만,
상태 기반 로직이 복잡하거나 API가 자주 변경될 가능성이 있는 경우에는 매우 유용한 개념이다.