Spring WebClient DataBufferLimit 오류 해결하기
Resolve DataBufferLimit in Spring WebClient
Spring Webflux의 WebClient로 대량의 데이터를 처리하는 경우 DataBufferLimitException
예외가 발생합니다. 메모리 이슈를 예방하는 차원에서 WebClient Codec
의 최대 버퍼 사이즈를 기본적으로 256K로 제한해 두었기 때문입니다.
console
Caused by: org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
오류를 해결하는 방법은 Codec
의 최대 버퍼 사이즈를 늘리는 것입니다.
private static final int MAX_IN_MEMORY_SIZE = 1024 * 1024;
private static final int UNLIMITED_IN_MEMORY_SIZE = -1;
private ExchangeStrategies configureCodec() {
return ExchangeStrategies.builder()
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(MAX_IN_MEMORY_SIZE))
.build();
}
maxInMemorySize(int byteCount)
Codec
의 최대 버퍼 사이즈를 설정합니다.- bytes 단위이며 현재 1MB로 설정하였습니다.
- 사이즈를 무제한으로 설정하려면
-1
을 입력합니다.
Codec
의 최대 버퍼 사이즈 설정을 마친 ExchangeStrategies
를 WebClient 인스턴스 구성에 추가합니다.
private WebClient createWebClient() {
WebClient webClient = WebClient.builder()
.baseUrl("https://www.catsriding.dev")
.defaultHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE)
.exchangeStrategies(configureCodec())
.build();
}
이렇게 생성한 WebClient 인스턴스로 DataBufferLimitException
오류가 발생했던 외부 API를 다시 호출해 보면 이번에는 예외 없이 정상적으로 동작하는 것을 확인할 수 있습니다.
- Spring
- Reactive