2019. 4. 21. 17:05ㆍ[정리] 기능별 개념 정리/스프링 부트
Spring 에서 Remote REST Service를 호출 할 일이 있을 때 사용한다.
RestTemplate instance 는 보통 사용하기 전에 Customizing을한다.
RestTemplate 을 customizing 하는 대표적인 3가지 방법
방법 1. RestTemplateBuilder 사용하기
restTemplate = restTemplateBuilder.build();
방법 2. RestTemplateCustomizer 만들어 사용하기 -> RestTemplate을 Customize 하면 자동으로 RestTemplateBuilder에 추가된다.
static class ProxyCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
HttpHost proxy = new HttpHost("proxy.example.com");
HttpClient httpClient =
HttpClientBuilder
.create()
.setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(
HttpHost target,
HttpRequest request,
HttpContext context)
throws HttpException {
if (target.getHostName().equals("192.168.0.5"))
return null;
return super.determineProxy(target, request, context);
}
}).build();
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
}
방법 3. 자체적인 RestTemplateBuilder 를 만들기 (잘 안쓰임)
RestTemplate의 주요 메소드
1. getForObject()
2. postForObject()
3. put()
4. delete()
5. exchange() : Header를 setting 해서 request를 보내고 ResponseEntity<> 로 결과를 받는다.
RestTemplate vs AsyncRestTemplate vs WebClient
1. RestTemplate은 동기 처리이기 때문에 block이 된다.
2. 비동기 처리를 구현하고 싶으면 AsyncRestTemplate을 사용하면된다.
-> 지금은 Reactive 구조가 나오면서 deprecated 됬다.
3. 비동기 처리 이상의 Reative 한 구조를 원한다면 WebClient를 사용하면 된다.
-> Reactive이기 때문에 Return type 이 Mono<> 또는 Flux<> 이다.
-> Reactive이기 때문에 subscribe 하기전에는 flow 가 발생하지 않는다.
WebClient
WebClient는 3가지 방법으로 Customizer할 수 있다.
1. WebClient.Builder 사용하기 (WebClient.Builder는 싱글톤이므로 커스터마이징 하고 싶으면 빌더를 clone 해서 사용해라.)
2. WebClientCustomizer 만들어 사용하기
3. WebClient.create() 사용하기
WebClient 주요 사용법
WebClient webClient = webClientBuilder
.baseUrl("https://localhost:9999")
.build();
Mono<User> userMono = webClient
.get()
.url("/user/123456789")
.retrieve()
.bodyToMono(MyEntity.class);
myEntityMono.doOnSuccess(myEntity -> {
System.out.println(MyEntity.toString());
}).subscribe();
'[정리] 기능별 개념 정리 > 스프링 부트' 카테고리의 다른 글
스프링 AOP, Transaction (0) | 2019.04.21 |
---|---|
Spring boot's NoSQL (0) | 2019.04.21 |
Bean Singleton or Prototype (0) | 2019.04.18 |
스프링 부트 - Shedlock (0) | 2019.04.09 |
스프링 부트 개발환경 로컬환경 분리 (0) | 2019.04.04 |