API를 호출하기 위해서 사용되는 HTTP Client 모듈 중 하나이다.
비슷한 것으로는 RestTemplate이라는 것이 존재한다.
RestTemplate | WebClient |
---|---|
Blocking | 비동기 Non-Blocking |
Java Servlet API 기반 | Spring Reactive Framework 기반 |
ThreadPerRequest Model 사용(요청 중 Block) | Request들은 Queue에 담겨 가능할 때 처리됨 |
나온지 오래됨 | RestTemplate에 비해 최신 |
특징 | RestTemplate | WebClient |
---|---|---|
속도 | 비슷(하중이 없다는 가정) | 비슷 |
친숙함 | 오래되어 많이 사용되고, 익숙함 | Reactive 기반이기 때문에 어색하고, 자료가 적음 |
성장성 | 유지 상태에 들어갔음. 즉, 특별한 업데이트 X |
Spring에서 지속적으로 개발되는 중. 즉 계속해서 업데이트 될 예정 |
장래성 | 언젠가 deprecated 될 수 있음. | 특별한 일이 없다면 계속해서 증가할 예정 |
Webclient 설정 클래스를 Bean에 등록해 전역적으로 공유가 가능하다.
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient() {
return WebClient.builder()
.baseUrl(WebClientProperties.BASE_URL)
.build();
}
}
이렇게 설정하면 추후에 Webclient 의존성을 주입 받을 때 위에서 **반환한 객체가 주입
**된다.
@Override
public Mono<BeerListResponse> listBeers() {
return webClient.get()
.uri(WebClientProperties.BEER_V1_PATH)
.retrieve()
.bodyToMono(BeerListResponse.class);
}