Webclient

API를 호출하기 위해서 사용되는 HTTP Client 모듈 중 하나이다.

비슷한 것으로는 RestTemplate이라는 것이 존재한다.


RestTemplate VS Webclient

RestTemplate WebClient
Blocking 비동기 Non-Blocking
Java Servlet API 기반 Spring Reactive Framework 기반
ThreadPerRequest Model 사용(요청 중 Block) Request들은 Queue에 담겨 가능할 때 처리됨
나온지 오래됨 RestTemplate에 비해 최신

언제 어떤걸 쓸까

특징 RestTemplate WebClient
속도 비슷(하중이 없다는 가정) 비슷
친숙함 오래되어 많이 사용되고, 익숙함 Reactive 기반이기 때문에 어색하고, 자료가 적음
성장성 유지 상태에 들어갔음. 즉, 특별한 업데이트 X Spring에서 지속적으로 개발되는 중. 즉 계속해서 업데이트 될 예정
장래성 언젠가 deprecated 될 수 있음. 특별한 일이 없다면 계속해서 증가할 예정

Webclient 설정하기

Webclient 설정 클래스를 Bean에 등록해 전역적으로 공유가 가능하다.

@Configuration
public class WebClientConfig {

    @Bean
    public WebClient webClient() {
        return WebClient.builder()
                .baseUrl(WebClientProperties.BASE_URL)
                .build();
    }
}

이렇게 설정하면 추후에 Webclient 의존성을 주입 받을 때 위에서 **반환한 객체가 주입**된다.


Webclient 사용하기

GET

@Override
public Mono<BeerListResponse> listBeers() {
    return webClient.get()
            .uri(WebClientProperties.BEER_V1_PATH)
            .retrieve()
            .bodyToMono(BeerListResponse.class);
}