-
[Spring] Level3 REST API 구현을 위한 HATEOAS 적용WEB/Spring 2020. 7. 5. 01:27
HATEOAS(Hypermedia As the Engine Of Application State)
현재 사용하고 있는 Restful에 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공
Level 0 : The Swamp of POX (원격 프로시저 호출)
일반 XML 데이터를 SOAP이나 XML-RPC 등으로 전송한다. POST 메소드만 사용하며, 서비스간에 단일 POST 메소드로 XML 데이터를 교환한다. 초창기 SOA 애플리케이션 제작 시 흔히 사용된 방식이다.
Level 1 : Resources (Rest 리소스)
함수에 파라미터를 넘기는 대신 REST URI를 이용한다. 레벨 0처럼 POST 메소드 하나밖에 사용하지 않지만, POST 메소드로 서비스간 통신을 하면서 복잡한 기능을 여러 리소스로 분산시킨다는 점에서 한 단계 발전된 형태라고 볼 수 있다.
Level 2 : HTTP Verbs (추가 HTTP 메소드)
레벨2는 POST 이외에 GET, HEAD, DELETE, PUT 메소드를 추가적으로 사용한다. HTTP 요청시 여러 메소드를 사용하여 다양한 리소스를 제공할 수 있다는 점에서 REST의 진정한 유스 케이스라 할 수 있다.
Level 3 : Hypermedia Controls (HATEOAS)
애플리케이션 상태 엔진으로서의 하이퍼미디어(HATEOAS, Hypermedia as the Engine of Application State)는 리차드슨 성숙도 모델의 가장 성숙한 단계로서, 요청에 대한 하이퍼미디어 응답 속에 클라이언트가 다음에 취해야 할 액션에 관한 상태 정보가 담겨 있다. 레벨 3는 발견 가능성(Discoverability)가 높고, 응답 자체에 대한 필요한 내용이 고스란이 담겨 있다. 리소스 뿐만 ㅇ아니라 그 이상의 부가적인 정보까지 나타낸다는 점에서 HATEOAS가 진정한 REST냐 하는 문제는 아직도 논란의 여지가 있다.
HATEOAS 적용해보기
먼저 다음 그림과 같이 의존성 주입을 해줍니다.
(메이븐을 이용했으므로 pom.xml에 다음과 같이 의존성을 추가함)
그 다음 현재 프로젝트의 스프링 버전이 어떻게 되는지 확인을 해야합니다. 왜냐하면 스프링 버전에따라 HATEOAS를 적용하는 코드가 다음과 같이 달라지기 때문입니다.
스프링 2.1.X인 경우
Resource,
ControllerLinkBuilder 를 이용
스프링 2.2.X 이상인 경우
Resource -> EntityModel,
ControllerLinkBuilder -> WebMvcLinkBuilder 를 이용
따라서 아래와 같이 버전 확인을 먼저 해줍니다.
스프링 버전이 2.1.14 인 것을 확인했으므로 Resource, ControllerLinkBuilder를 이용하여 필요에 따라 다음과 같이 HATEOAS를 적용.
출처 : https://lifeisgift.tistory.com/entry/Restful-API-개요 [기록은 역사가 된다]
출처 : https://www.inflearn.com/course/spring-boot-restful-web-services
'WEB > Spring' 카테고리의 다른 글
[Spring] 스프링 MVC 3-tier 구성 (0) 2020.07.18 [Spring] 스프링의 주요 특징 (0) 2020.07.17 [Spring Boot] java.sql.SQLNonTransientConnectionException: Could not create connection to database server. (0) 2020.06.06 [Spring] The prefix "mybatis-spring" for element "mybatis-spring:scan" is not bound. (0) 2020.05.28 [Spring Boot] h2 Database 인덱스 auto_increment 초기화 (0) 2020.05.05