이 글은 Spring 6.0의 HTTP Interface 사용법 및 REST API Client 방식의 변화를 설명하고자 합니다.
해당 내용은 깃헙에 올려져 있습니다.
Spring 6.0 등장
2022년 11월 Spring 6.0 버전이 나왔습니다.
주요 특징이 있다면 6.0 버전 부터는 Java 17 이상만 지원을 합니다.
Spring Initilzer 에서도 이제는 Spring Boot 3.0 이상 지원을 기본으로 합니다.
아마 올 상반기 쯤에는 Spring Initializer에 2.7.9 버전은 보이지도 않을지도 모릅니다.
그래서 앞으로는 개발의 편의성을 위해 Java 11에서 17로 바꿔주는 작업을 해줍니다.
그에 맞게 환경 변수도 편집하고 IDE에도 Java 17로 구동하도록 변경해줍니다.
Rest Client
Spring 6.0부터 새로 생긴 기능 중 REST API 통신으로 쓰이는 HTTP Interface가 하나 더 생겼습니다.
내용은 가이드라인에서 확인이 가능합니다.
Spring 3.0에서는 RestTemplate
Spring 5.0에서는 WebFlux의 WebClient
Spring 6.0에서는 HTTP Interface
의 순서로 발전됐습니다.
HTTP Interface
출산율 데이터 이용
외부 API를 어떤 것을 쓸까하다가 The World Bank의 출산율 데이터를 이용했습니다.
기존 Rest Client와의 비교
HTTP Interface 사용에 앞서 이제는 전통적 방법(?)이 되어버린 RestTemplate과 WebClient의 코드도 넣어놨으니 어떠한 변화가 있었는지 참조해보면 좋을 듯 합니다.
HTTP Interface의 사용법 ( 가이드문서 )
// Http Interface ( 가이드문서 in 'https://docs.spring.io/spring-framework/docs/6.0.0/reference/html/integration.html#rest-http-interface' )
WebClient client2 = WebClient.create("https://api.worldbank.org");
HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client2)).build();
RepositoryService service = factory.createClient(RepositoryService.class);
List<Map> list3 = service.getFertilityRate("USA");
printFertilityRate(list3, "미국");
공식 가이드문서에 따른 내용은 위와 같습니다.
Interface를 하나 만들어두어서 엔드포인트를 설정하고 WebClient를 이용해 API 호출로 사용합니다.
가이드문서만 보자면 조금 복잡합니다.
당연히 위의 설정들을 Bean으로 등록해서 쓰라는 얘기겠죠.
HTTP Interface의 사용법 ( Bean 등록 )
위의 까지는 @Bean 설정이고 아래는 사용 방법입니다.
짜잔. 좀 더 Java스러워졌고 깔끔해졌습니다.
기존 WebClient 방식은 WebFlux 기능을 이용하고 빌더 패턴으로 인해 조금은 코드가 복잡해 보였습니다.
이제 HTTP Interface는 이제 완전한 Spring 구조를 갖춘 것으로 보입니다.
Spring 진영에서 Spring Cloud에 있는 서비스끼리 호출 할 때도 마치 위와 같은 호출 방식으로 개발자에게 사용하도록 권장하는데, 이번에 나온 REST API Client도 그런 차원에서 만들어진 듯 합니다.
'🍃 Spring' 카테고리의 다른 글
스프링 클라우드 기초 사용법 및 소개(1) (0) | 2023.07.05 |
---|---|
Spring AOT(Ahead-Of-Time) 경험 이야기 (2) | 2023.03.11 |
ResponseEntity의 사용법 및 유지보수 (7) | 2023.02.20 |
Spring WebFlux & Kotlin 샘플 프로젝트 (0) | 2023.01.15 |
어노테이션의 요소는 항상 상수여야 하는가?(컴파일 타임 상수) (0) | 2022.12.31 |