서버로 웹 요청을 보내고 응답을 받을 수 있게 도와주는 RestTemplate 과 WebClient
RestTemplate
스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿
RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다.
동기 방식으로 처리되며, AsyncRestTemplate를 사용하면 비동기 방식으로 사용할 수 있다.
현업에서 많이 쓰이지만 지원이 중단된 상태여서 최신 버전에서는 WebClient 사용을 권고한다.
WebClient
Reactor 기반으로 동작하는 API
스레드와 동시성 문제를 벗어나 비동기 형식으로 사용할 수 있다.
특징
Non-Blocking I/O 를 지원한다
Reactive Streams의 Back Pressure를 지원한다
적은 하드웨어 리소스로 동시성을 지원한다.
함수형 API를 지원한다
동기, 비동기 상호작용을 지원한다
스트리밍을 지원한다
생성 방법
방법1) builder() 를 이용한 생성
public String getName() {
WebClient webClient = WebCLient.builder()
.baseUrl("http://localhost:9090")
.defaultHeader(HttpHeader.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
return webClient.get()
.uri("/api/v1/crud-api")
.retrieve()
.bodyToMono(String.class) // 리턴타입 설정
.block(); // blocking 형식으로 동작
}
방법2) create() 를 이용한 생성
path varible 요청
public String getName() {
WebClient webClient = WebCLient.create("http://localhost:9090");
ResponseEntity<String> responseEntity = webClient.get()
.uri(uriBuilder -> uriBuilder.path("/api/v1/crud-api/{name}").build("Flature"))
.retrieve().toEntity(String.class).block();
return responseEntity.getBody();
}
쿼리 파라미터 요청
public String getName() {
WebClient webClient = WebCLient.create("http://localhost:9090");
return webClient.get()
.uri(uriBuilder -> uriBuilder.path("/api/v1/crud-api").queryParam("name", "Flature").build("Flature"))
.exchangeToMono(clientResponse -> {
if(clientResponse.statusCode().equals(HttpStatus.OK)) {
return clientResponse.bodyToMono(String.class);
} else {
return clientResponse.createException().flatMap(Mono::error);
}
})
.block();
return responseEntity.getBody();
}
728x90
반응형
'개발공부 > JAVA Spring' 카테고리의 다른 글
[SpringBoot] Spring Batch 5 (1) | 2023.07.20 |
---|---|
[Spring Boot] JWT 튜토리얼 [chap.1~3] - 인프런 강의 (0) | 2023.07.01 |
객체지향 패러다임 (0) | 2023.04.12 |
[Spring Boot] 예외처리 (0) | 2023.03.28 |
[Spring Boot] JPA 영속성 전이 cascade, 고아객체 (0) | 2023.03.27 |
댓글