Spring
[Spring] WebClient
차가운개발
2024. 12. 9. 13:56
WebClient는 Spring 5에서 도입된 HTTP 클라이언트로 REST API와 같은 웹 서비스를 호출하기 위해 사용된다. 기존의 RestTemplate를 대체하며 **비동기와 논블로킹** 방식으로 설계되어 있다. Spring WebFlux의 일부지만, Spring MVC 프로젝트에서도 사용할 수 있다.
특징 및 장점
- 비동기 및 논 블로킹 I/O
WebClient는 Netty와 같은 비동기 논블로킹 I/O 라이브러리를 활용해 설계되었다.
이를 통해 대규모 요청을 처리할 때 더 적은 리소스를 사용하며 높은 동시성을 제공한다 - 반응형 프로그래밍 지원
Mono와 Flux와 같은 Reactor 타입을 반환하여 비동기 데이터 스트림을 처리한다.
이를 통해 데이터의 지연 로드, 병렬 처리, 오류 처리등을 효율적으로 수행할 수 있다. - 유연한 설정 및 확장성
다양한 요청 옵션(헤더, 쿼리 파라미터, 바디)을 설정할 수 있다.
요청이나 응답을 가공하거나 필터링할 수 있는 ExchangeFilterFunction을 제공한다 - 다양한 HTTP 메서드 지원
GET, POST, PUT, DELETE 등 모든 HTTP 메서드를 지원한다 - 동기식 요청 가능
필요하다면 동기 방식으로 사용할 수 있다
기본 구조
WebClient는 builder()를 통해 설정하고 생성한다
WebClient webClient = WebClient.builder()
.baseUrl("https://api.example.com")
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.build();
HTTP 요청 생성
HTTP 요청 메서드를 지정하여 HTTP 요청을 생성한다
webClient.get()
.uri("/resource")
.retrieve()
.bodyToMono(String.class)
.subscribe(System.out::println);
사용 시 주의점
- Rate Limiting
API 호출이 많은 경우, 요청 속도 제한이 걸리지 않도록 적절한 백오프 전략을 적용한다 - 에러처리
HTTP 상태 코드별 예외 처리가 필요하다 - 메모리 관리
비동기 논블로킹 방식이므로 메모리 누수가 발생하지 않도록 스트림 종료와 에러 처리를 확실히 해야한