[스프링 REST 클라이언트]_02_커스터마이징

less than 1 minute read

스프링 REST 클라이언트 2부: 커스터마이징

RestTemplate

  • 기본으로 java.net.HttpURLConnection 사용.
  • 커스터마이징
    • 로컬 커스터마이징
    • 글로벌 커스터마이징
      • RestTemplateCustomizer
      • 빈 재정의

WebClient

  • 기본으로 Reactor Netty의 HTTP 클라이언트 사용.
  • 커스터마이징
    • 로컬 커스터마이징
    • 글로벌 커스터마이징
      • WebClientCustomizer
      • 빈 재정의

WebClient 커스터마이징

builderbuild()를 호출하기 전에 커스터마이징 할 수 있다.

로컬 커스터마이징

@Override
public void run(ApplicationArguments args) throws Exception {
    WebClient webClient = builder
            .baseUrl("http://localhost:8080")
            .build();
}

글로벌 커스터마이징

  • WebClientCustomizer를 빈으로 등록해주면 된다.

모든 빌더가 다음 설정된 상태로 다른 빈들에 주입이 된다.

@SpringBootApplication
public class SpringbootrestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootrestApplication.class, args);
    }

    @Bean
    public WebClientCustomizer webClientCustomizer() {
        return new WebClientCustomizer() {
            @Override
            public void customize(WebClient.Builder webClientBuilder) {
                webClientBuilder.baseUrl("http://localhost:8080");
            }
        };
    }

}

→ 스프링부트가 WebClientAutoConfiguration으로 만들어주는 빌더가 webClientCustomize에 webClientBuilder 로 들어온다.

이게 싫다면 WebClientCustomizer말고 빌더 자체를 빈으로 등록해서 사용해도 된다.


RestTemplate 커스터마이징

RestTemplate가 밑단에서 사용하는 API는 기본으로 java.net.HttpURLConnection 사용한다.

이를 Apache HttpClient로 변경해서 쓸 수 있다.

  1. httpclient 의존성 추가

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
    
  2. RestTemplateCustomizer 빈으로 등록

    RequestFactory를 설정해주면 된다. 원하는 구현체에 맞는 Adapter형식의 RequestFactory가 있다. (스프링의 PSA가 잘 적용되어있는 부분이다.)

    @Bean
    public RestTemplateCustomizer restTemplateCustomizer() {
      return new RestTemplateCustomizer() {
        @Override
        public void customize(RestTemplate restTemplate) {
          restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        }
      };
    }