본문 바로가기

개발중/Spring Boot

Spring Boot 3와 WebClient: 비동기식 HTTP 요청을 쉽게 구현하기

728x90
반응형

 

 

 

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를 사용하는 것이 권장됩니다.

 

 

코드 정리

 

GitHub - soobinJung/SpringBootWebClient

Contribute to soobinJung/SpringBootWebClient development by creating an account on GitHub.

github.com

 

 

Mono와 Flux의 차이점과 활용법 - Spring WebFlux

 

Mono와 Flux의 차이점과 활용법 - Spring WebFlux

Flux와 MonoSpring WebFlux의 Flux와 Mono는 반응형 프로그래밍 모델의 두 가지 주요 구성 요소입니다. Mono Mono는 0 또는 1개의 요소를 비동기적으로 제공하는 Publisher입니다. 단일 값 또는 빈 값의

soobindeveloper8.tistory.com

 

 

 

 

728x90
반응형