티스토리 뷰

HTTPInterface

Spring Boot 버전 3.0 (Spring Framework 6.0) 사용하면 HTTPInterface를 사용할 수 있습니다 . 

주석이 달린 Java 인터페이스를 사용하여 원격 API 세부 정보를 간단히 표현하고 Spring이 이 인터페이스를 구현하고 교환을 수행하는 프록시를 생성하도록 할 수 있습니다.

Spring Data에서 리포지토리를 정의하는 방법과 유사합니다.

public interface NaverAccessTokenClient {

    @GetExchange(
            value = "https://nid.naver.com/oauth2.0/token",
            accept = MediaType.APPLICATION_JSON_VALUE
    )
    NaverAccessTokenResponse getNaverToken(@RequestParam MultiValueMap<String, String> params);
}

@Configuration
public class NaverAccessTokenClientImpl {

    @Bean
    public NaverAccessTokenClient naverApiClient() {
        WebClient webClient = WebClient.create();
        HttpServiceProxyFactory build = HttpServiceProxyFactory.builderFor(WebClientAdapter.create(webClient))
                .build();
        return build.createClient(NaverAccessTokenClient.class);
    }
}

 

HTTPInterface의 단점은 HTTP 인터페이스가 WebClient를 기반으로 하며 이를 사용하려면 WebFlux 의존성 전체를 추가해야 한다는 것입니다.

 

RestClient

Spring Boot 버전 3.2 (Spring Framework 6.1)에서는 새로운 동기식 HTTP 클라이언트인 "RestClient"가 도입되었습니다.

이를 통해 기존에 사용하던 WebFlux 종속성을 제거할 있으며, OpenFeign 같은 추가적인 종속성이 이상 필요 없습니다.

@Bean
public NaverAccessTokenClient naverApiClient() {
    WebClient webClient = WebClient.create();
    HttpServiceProxyFactory build = HttpServiceProxyFactory.builderFor(WebClientAdapter.create(webClient))
            .build();
    return build.createClient(NaverAccessTokenClient.class);
}

---

@Bean
public NaverAccessTokenClient naverApiClient() {
    RestClient restClient = RestClient.create();
    HttpServiceProxyFactory build = HttpServiceProxyFactory.builderFor(RestClientAdapter.create(restClient))
            .build();
    return build.createClient(NaverAccessTokenClient.class);
}

기존에 코드에서 WebClient와 WebClientAdapter만 변경해주면 된다.

 

 


https://spring.io/blog/2023/07/13/new-in-spring-6-1-restclient

https://github.com/thdwoqor/social-login