-
Spring 6 Http InterfaceJava, Kotlin, Spring 2023. 4. 7. 14:12
Spring 6에서 도입된 Http Interface는 Java 인터페이스를 사용하여 HTTP 서비스를 정의하고 HTTP 요청을 위한 어노테이션된 메서드를 사용하는 기능이다.
공식문서에 소개된 예제를 바탕으로 아래 글을 작성하였다.
이 기능을 사용하면 해당 인터페이스를 구현하는 프록시를 생성하여 요청을 수행할 수 있다.
이는 HTTP 원격 액세스를 간편하게 할 수 있으며 종종 기본 HTTP 클라이언트를 사용하는 세부 정보를 감싸는 퍼사드(facade)가 필요한 경우에도 도움이 된다.
아래 예제코드에서는 Github API에서 저장소(Repository) 정보를 가져오는 HTTP 서비스를 정의하고, 이를 사용하여 Github API를 호출한다.
먼저, 인터페이스에서 HTTP Exchange 메서드를 어노테이션으로 정의한다.
interface RepositoryService { @GetExchange("/repos/{owner}/{repo}") Repository getRepository(@PathVariable String owner, @PathVariable String repo); }
위의 코드에서 @GetExchange는 HTTP GET 메서드를 나타내며, /repos/{owner}/{repo} 경로에 대한 요청을 수행한다.
이 인터페이스는 Github API에서 저장소 정보를 가져오는 메서드를 정의한다.
그리고, 해당 HTTP 서비스를 호출하기 위해 프록시를 생성한다.
WebClient client = WebClient.builder().baseUrl("https://api.github.com/").build(); HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build(); RepositoryService service = factory.createClient(RepositoryService.class);
위의 코드에서는 Github API를 호출하기 위해 WebClient를 생성하고, HttpServiceProxyFactory를 사용하여 프록시를 생성한다.
이제 RepositoryService 인터페이스를 구현하는 프록시를 사용하여 저장소 정보를 가져올 수 있다.
Repository repo = service.getRepository("octocat", "hello-world");
여기서 사용된 Http Interface의 주요 어노테이션은 다음과 같다.
- @GetExchange: HTTP GET 메서드
- @PatchExchange: HTTP PATCH 메서드
- @PostExchange: HTTP POST 메서드
- @PutExchange: HTTP PUT 메서드
- @DeleteExchange: HTTP DELETE 메서드
- @HttpExchange: 모든 HTTP 메서드
이 외에도 다양한 어노테이션과 옵션을 제공하여 HTTP 교환을 세밀하게 제어할 수 있다.
반응형'Java, Kotlin, Spring' 카테고리의 다른 글
GraalVM 메모리 관리 간단 정리 (0) 2023.04.07 Spring 6, Springboot 3.0 새로운 기능 (0) 2023.04.07 Spring Data 분석하기 - 1편 소개 (0) 2022.08.11 Spring data mongodb multiple database config 설정하기 (0) 2022.06.24 Spring Bean 스코프 (0) 2022.06.19