본문 바로가기
Dev/Spring Boot

[스프링 부트 개념과 활용] 스프링 REST 클라이언트 2부

by dev_jsk 2020. 9. 3.
728x90
반응형

커스터마이징

RestTemplate와 WebClient의 HttpTemplate

RestTemplate

  • java.net.HttpURLConnection 사용

WebClient

  • Reactor Netty의 HTTP 클라이언트 사용

로컬 커스터마이징

WebClient baseUrl 적용

// RestRunner.java
@Component
public class RestRunner implements ApplicationRunner {
@Autowired
WebClient.Builder builder;
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder.baseUrl("http://localhost:8080").build(); // baseUrl 적용
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Mono<String> helloMono = webClient.get().uri("/hello").retrieve().bodyToMono(String.class);
helloMono.subscribe(s -> {
System.out.println(s);
if(stopWatch.isRunning()) {
stopWatch.stop();
}
System.out.println(stopWatch.prettyPrint());
stopWatch.start();
});
Mono<String> worldMono = webClient.get().uri("/world").retrieve().bodyToMono(String.class);
worldMono.subscribe(s -> {
System.out.println(s);
if(stopWatch.isRunning()) {
stopWatch.stop();
}
System.out.println(stopWatch.prettyPrint());
stopWatch.start();
});
}
}

결과

baseUrl 설정 시 WebClient.Uri()호출Url만 입력할 수 있다.

 

글로벌 커스터마이징

1. WebClientCustomizer 이용 baseUrl 설정하기

// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// WebClientCustomizer Bean 등록
@Bean
public WebClientCustomizer webClientCustomizer() {
return new WebClientCustomizer(){
@Override
public void customize(Builder webClientBuilder) {
webClientBuilder.baseUrl("http://localhost:8080"); // baseUrl 설정
}
};
}
}
// RestRunner.java
@Component
public class RestRunner implements ApplicationRunner {
@Autowired
WebClient.Builder builder;
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder.build(); // baseUrl 설정 제거
...
}
}

결과

baseUrl 설정 시 WebClient.Uri()호출Url만 입력할 수 있다.

2. RestTemplateCustomizer 이용 Apach Http Client로 변경하기

(1) 의존성 추가

// pom.xml
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>

(2) Application 클래스 수정

// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public RestTemplateCustomizer restTemplateCustomizer() {
return new RestTemplateCustomizer(){
@Override
public void customize(RestTemplate restTemplate) {
// 각각 원하는 구현체에 맞는 Adaptor 형식의 RequestFactory가 있다.
// Spring PSA(Portable Service Abstraction)가 잘 적용되어 있다.
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
}
};
}
}

결과

RestTemplateJava에 있는 기본 HttpConnection 대신 Apache에서 제공하는 HttpClient를 사용한다.

728x90
반응형

댓글