728x90
반응형
Spring Boot에서 WebClient는 비동기식 HTTP 요청을 처리하기 위해 사용되는 클라이언트입니다. WebClient는 Spring 5에서 도입된 새로운 HTTP 클라이언트로, RestTemplate의 대체제로 설계되었습니다. WebClient는 비동기 및 동기 방식 모두를 지원하며, 더 유연하고 강력한 기능을 제공합니다.
WebClient 기본 설정
Spring Boot 프로젝트에서 WebClient를 사용하려면 먼저 의존성을 추가해야 합니다. build.gradle 또는 pom.xml 파일에 다음을 추가하세요.
Gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
}
Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
WebClient 설정
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.Builder webClientBuilder() {
return WebClient.builder();
}
}
WebClient를 사용한 GET 요청
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 ApiService {
@Autowired
private WebClient.Builder webClientBuilder;
public String getExample() {
WebClient webClient = webClientBuilder.build();
Mono<String> response = webClient.get()
.uri("https://jsonplaceholder.typicode.com/posts/1")
.retrieve()
.bodyToMono(String.class);
return response.block(); // block()은 비동기 Mono를 동기적으로 변환하여 결과를 기다립니다.
}
}
WebClient를 사용한 POST 요청
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 ApiService {
@Autowired
private WebClient.Builder webClientBuilder;
public String createPost() {
WebClient webClient = webClientBuilder.build();
Mono<String> response = webClient.post()
.uri("https://jsonplaceholder.typicode.com/posts")
.bodyValue(new PostRequest("Spring Boot", "WebClient Example"))
.retrieve()
.bodyToMono(String.class);
return response.block();
}
}
class PostRequest {
private String title;
private String body;
public PostRequest(String title, String body) {
this.title = title;
this.body = body;
}
// Getters and Setters
}
WebClient의 추가 기능
헤더 설정: 요청에 커스텀 헤더를 추가할 수 있습니다.
WebClient webClient = webClientBuilder.build();
Mono<String> response = webClient.get()
.uri("https://jsonplaceholder.typicode.com/posts/1")
.header("Authorization", "Bearer token")
.retrieve()
.bodyToMono(String.class);
쿼리 파라미터 설정: URI에 쿼리 파라미터를 추가할 수 있습니다.
WebClient webClient = webClientBuilder.build();
Mono<String> response = webClient.get()
.uri(uriBuilder -> uriBuilder
.path("/posts")
.queryParam("userId", 1)
.build())
.retrieve()
.bodyToMono(String.class);
에러 처리: 응답의 에러를 처리할 수 있습니다.
WebClient webClient = webClientBuilder.build();
Mono<String> response = webClient.get()
.uri("https://jsonplaceholder.typicode.com/posts/1")
.retrieve()
.onStatus(HttpStatus::is4xxClientError, clientResponse -> {
return Mono.error(new RuntimeException("4xx error"));
})
.onStatus(HttpStatus::is5xxServerError, clientResponse -> {
return Mono.error(new RuntimeException("5xx error"));
})
.bodyToMono(String.class);
이 외에도 WebClient는 다양한 메서드 체인과 커스터마이징 옵션을 제공하여, 매우 유연하게 HTTP 요청을 처리할 수 있습니다. WebClient를 통해 다양한 비동기 작업을 쉽게 구현할 수 있습니다.
728x90
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Java 21 Virtual Thread와 Kotlin Coroutine 비교해보기 (0) | 2024.05.23 |
---|---|
[JAVA] Java 21 새로운 기능 - Virtual Thread란 무엇인가? (0) | 2024.05.23 |
[JAVA] RestTemplate 개념 알아보기! 간단 예제 포함! (0) | 2024.05.16 |
자바 성능 튜닝 정보 알아보기! (0) | 2024.01.30 |
JPA + Hibernate 설치 및 구성 알아보기! (0) | 2021.07.02 |