Spring Webflux 환경에서 다음과 같은 에러가 발생했다.
org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144
at org.springframework.core.io.buffer.LimitedDataBufferList.raiseLimitException(LimitedDataBufferList.java:98)
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
우선 에러의 원인은 WebClient에서 요청을 날릴 때 보내는 request body의 크기가 제한 크기(default: 262K)를 초과한 것이었다.
나는 E2E 테스트를 제외하곤 별도로 WebClient를 사용하지 않아서 좀 더 찾아보니 reactive feign 내부적으로 외부 API 요청을 위해 WebClient를 사용하고 있었다.
WebClient를 빈으로 등록해서 사용하는 경우엔 빈 메서드 내부에서 설정을 해주면 되지만, 개인적으론 feign 내부에서 사용하는 WebClient의 구현체를 바꾸는 것이 다소 부담스러웠다. 이에 메모리 사이즈 제한만 늘린 후 CodecCustomizer를 별도의 빈으로 등록해서 문제를 해결했다. 전자의 방법으로 해결하고 싶다면 여기를 참고하자.
@Configuration
class FeignConfig {
...
@Bean
fun codecCustomizer(): CodecCustomizer {
return CodecCustomizer {
it.defaultCodecs()
.maxInMemorySize(1 * 1024 * 1024) // 1MB
}
}
}