WebClient
Spring Boot 3에서 WebClient는 비동기 및 동기식 HTTP 요청을 수행하기 위해 사용되는, 강력하고 유연한 HTTP 클라이언트입니다. WebClient는 Spring 5에서 처음 도입되었으며, Spring Boot 2.x 및 3.x에서도 계속해서 사용되고 있습니다. 이는 Spring의 기존 RestTemplate을 대체하는 역할을 수행하며, 비동기식 API 호출을 더욱 간편하게 구현할 수 있도록 합니다.
주요 특징
비동기 및 동기식 요청
WebClient는 비동기식과 동기식 요청을 모두 지원합니다.
반응형 프로그래밍 지원
WebClient는 Reactor 라이브러리를 기반으로 하여, 반응형 스트림을 활용한 비동기 프로그래밍을 지원합니다.
플러그인 아키텍처
요청 및 응답을 변환하고 처리하기 위한 다양한 플러그인을 쉽게 추가할 수 있습니다.
WebClient 설정 및 사용 예제
Maven 의존성 추가
먼저, pom.xml 파일에 Spring WebFlux 의존성을 추가해야 합니다:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
WebClient 빈 설정
WebClient를 빈으로 설정하는 방법입니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(WebClient.Builder builder) {
return builder
.baseUrl("https://api.example.com")
.build();
}
}
WebClient 사용 예제
WebClient를 사용하여 HTTP 요청을 보내는 예제입니다:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Service
public class MyService {
private final WebClient webClient;
@Autowired
public MyService(WebClient webClient) {
this.webClient = webClient;
}
public Mono<String> fetchSomeData() {
return webClient.get()
.uri("/data")
.retrieve()
.bodyToMono(String.class);
}
}
WebClient 생성 방법
Spring Boot에서 WebClient를 생성하는 두 가지 방법을 설명합니다: create()를 사용하는 방법과 build()를 사용하는 방법입니다.
1. 단순하게 create()를 사용하는 방법
create() 메서드를 사용하면 기본 설정으로 WebClient 인스턴스를 빠르게 생성할 수 있습니다.
WebClient webClient = WebClient.create("https://api.example.com");
이 방법은 기본적인 HTTP 클라이언트를 필요로 할 때 유용합니다.
2. 옵션을 추가할 수 있는 build()를 사용하는 방법
build() 메서드를 사용하면 다양한 옵션을 추가하여 WebClient를 구성할 수 있습니다.
이를 통해 더 복잡한 설정을 적용할 수 있습니다.
WebClient webClient = WebClient.builder()
.baseUrl("https://api.example.com")
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.defaultUriVariables(Collections.singletonMap("url", "https://api.example.com"))
.build();
이 방법은 WebClient를 커스터마이징하여 사용하고자 할 때 유용합니다
WebClient 사용 방법
GET 요청
Mono<String> response = webClient.get()
.uri("/endpoint")
.retrieve()
.bodyToMono(String.class);
POST 요청
Mono<String> response = webClient.post()
.uri("/endpoint")
.bodyValue(new MyRequest())
.retrieve()
.bodyToMono(String.class);
헤더 설정
Mono<String> response = webClient.get()
.uri("/endpoint")
.header("Authorization", "Bearer my-token")
.retrieve()
.bodyToMono(String.class);
에러 처리
Mono<String> response = webClient.get()
.uri("/endpoint")
.retrieve()
.onStatus(HttpStatus::is4xxClientError, clientResponse -> {
return Mono.error(new RuntimeException("Client error"));
})
.onStatus(HttpStatus::is5xxServerError, clientResponse -> {
return Mono.error(new RuntimeException("Server error"));
})
.bodyToMono(String.class);
WebClient vs RestTemplate
RestTemplate는 동기식 API 호출을 지원하며, 사용이 간편하지만 확장성과 유연성이 부족합니다.
WebClient는 비동기식 API 호출을 지원하며, 반응형 프로그래밍 모델을 사용하여 높은 유연성과 확장성을 제공합니다.
WebClient는 현대적인 비동기 및 반응형 애플리케이션 개발에 적합하며, Spring Boot 3에서는 더 많은 기능과 유연성을 제공합니다. 따라서 새로운 프로젝트에서는 RestTemplate 대신 WebClient를 사용하는 것이 권장됩니다.
Mono와 Flux의 차이점과 활용법 - Spring WebFlux
'개발중 > Spring Boot' 카테고리의 다른 글
ApplicationListener 를 이용해서 어플리케이션 기동시 에러날 경우에 대처하기. (0) | 2024.09.19 |
---|---|
Mono와 Flux의 차이점과 활용법 - Spring WebFlux (0) | 2024.06.11 |