728x90
스프링 부트 개념과 활용
4. 스프링 부트 활용
포스팅 참조 정보
GitHub
공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다
해당 포스팅에 대한 내용의 GitHub 주소
실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다
https://github.com/freespringlecture/springboot-concept-uses/tree/chap04-12-02-rest-custmizing
해당 포스팅 참고 인프런 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
실습 환경
- Java Version: Java 11
- SpringBoot Version: 2.1.2.RELEASE
12. 스프링 REST 클라이언트 2부: 커스터마이징
지역적으로 커스터마이징
지역적으로 선언한 WebClient에 baseUrl을 설정하고 build 하고 아래쪽에서 uri 요청 시 baseUrl은 제외하고 요청
@Component
public class RestRunner implements ApplicationRunner {
@Autowired
WebClient.Builder builder;
@Autowired
RestTemplateBuilder restTemplateBuilder;
@Override
public void run(ApplicationArguments args) throws Exception {
WebClient webClient = builder
.baseUrl("http://localhost:8080")
.build();
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Mono<String> helloMono = webClient.get().uri("/hello") // get으로 /hello 요청
.retrieve() // 응답값을 가져옴
.bodyToMono(String.class);// Mono Type으로 변경
helloMono.subscribe(s -> {
System.out.println(s);
if(stopWatch.isRunning()) { // stopwatch가 실행중이면 종료
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();
});
}
}
생성자를 통해서 클래스안에서 공유하는 WebClient
설정법
WebClient webClient;
public RestRunner(WebClient.Builder builder) {
this.webClient = builder.build();
}
전역적으로 커스터마이징
WebClientCustomizer
사용- baseUrl을 적용한뒤 빈으로 등록해서 전역적으로 사용
- 모든 Builder는 baseUrl을 적용한대로 설정이되서 다른 빈들에 주입이 됨
WebClientCustomizerAutoConfiguration
에서 만들어주는 Builder가 customizer에 기본적으로 들어옴WebClientBuilder
자체를 다시 등록할 수도 있음
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public WebClientCustomizer webClientCustomizer() {
return new WebClientCustomizer() {
@Override
public void customize(WebClient.Builder webClientBuilder) {
webClientBuilder.baseUrl("http://localhost:8080");
}
};
}
}
HTTP 클라이언트 변경
RestTemplate
- 기본으로
java.net.HttpURLConnection
사용 - 커스터마이징
- 로컬 커스터마이징
- 글로벌 커스터마이징
RestTemplateCustomizer
- 빈 재정의
WebClient
- 기본으로 Reactor Netty의 HTTP 클라이언트 사용
- 커스터마이징
- 로컬 커스터마이징
- 글로벌 커스터마이징
WebClientCustomizer
- 빈 재정의
Apache HttpClient
로 변경 실습
RestTemplate
를 Apache HttpClient
로 변경해서 사용가능
Apache HttpClient
의존성 추가
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
RestTemplate
Apache HttpClient
를 사용하도록 변경
- 각각 원하는 구현체에 맞는 Adaptor형식에 RequestFactory가 있음
- 스프링의 PSA(Potable Service Acception)가 잘 적용이 되어있음
@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) {
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
}
};
}
}
728x90
'개발강의정리 > Spring' 카테고리의 다른 글
[스프링 부트 개념과 활용] 5-1. 스프링 부트 Actuator 1부: 소개 (0) | 2019.12.03 |
---|---|
[스프링 부트 개념과 활용] 4-13. 그 밖에 다양한 기술 연동 (0) | 2019.12.02 |
[스프링 부트 개념과 활용] 4-12. 스프링 REST 클라이언트 1부: RestTemplate과 WebClient (0) | 2019.11.30 |
[스프링 부트 개념과 활용] 4-11. 스프링 시큐리티 2부: 시큐리티 설정 커스터마이징 (0) | 2019.11.29 |
[스프링 부트 개념과 활용] 4-11. 스프링 시큐리티 1부: spring-boot-starter-security (0) | 2019.11.28 |
댓글