Spring WebClient

2024. 3. 10. 14:33Spring Boot

Spring Boot에서 API를 호출하기 위한 Http Client에는

대표적으로 Non-Blocking의 WebClient

Blocking의 RestTemplate가 있다.

 

그런데 이제 RestTemplate는 Deprecated 됬기 때문에

특별한 사정이 없으면 WebClient를 쓰면 된다.

 

Spring WebClient를 사용하기 위해서는 우선

 

 

implementation 'org.springframework.boot:spring-boot-starter-webflux'

를 통하여 필요한 라이브러리를 설정 해야한다.

 

 

import javax.net.ssl.SSLException;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.reactive.function.client.WebClient;

import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import reactor.netty.http.client.HttpClient;

@Configuration
public class client_config {
    
    @Bean
    public WebClient client() throws SSLException
    {
        SslContext sslContext;
        sslContext = SslContextBuilder
            .forClient()
            .trustManager(InsecureTrustManagerFactory.INSTANCE)
            .build();

        HttpClient httpClient = HttpClient
            .create()
            .secure(t ->
                    t.sslContext(sslContext));

        WebClient client = WebClient
            .builder()
            .baseUrl("https://localhost:5000/webclient")
            .clientConnector(new ReactorClientHttpConnector(httpClient))
            .build();
            return client;
    }
}

 

우선 사용할 WebClient를 Bean으로 등록시켰다.

또한 기본적으로 Https를 이용하기 때문에 SSL을 위한 clientConnector도 설정을 따로 해주었다.

 

@Autowired
    WebClient client;

    @GetMapping("/client/get/{param}")
    public Mono<String> test_get(@PathVariable String param) throws SSLException {
        return client
            .get()
            .uri("/get" + param)
            .retrieve()
            .bodyToMono(String.class);
    }

 

 

이런 식으로 사용하는데 이 경우 uri는 기본으로 설정한 baseUrl에 새로 넣은 uri가 합쳐져

https://localhost:5000/webclient/get + param으로 요청을 보내게 된다

'Spring Boot' 카테고리의 다른 글

R2DBC  (0) 2024.06.17
Spring WebFlux  (0) 2024.03.18
Asynchronized  (0) 2024.03.02
Spring Boot Studying  (0) 2024.02.28
Authorization by Spring Security  (0) 2024.02.28