생계유지형 개발자/Stack Over Flow 한국판

[Spring Boot] Exceeded limit on max bytes to buffer : 262144

이 가을 2021. 10. 22. 19:08

# 오류

Spring Boot에서 WebClient 사용하여 API 호출하는 로직에서 다음 에러가 발생했다. 

org.springframework.web.reactive.function.client.WebClientResponseException: 200 OK from GET http://API_URL;
nested exception is org.springframework.core.io.buffer.DataBufferLimitException:
Exceeded limit on max bytes to buffer : 262144

응답이 200 OK 인걸 보면 요청까지는 성공했는데 아무래도 응답사이즈가 커서 오류가 발생한 것 같다.

 

# 원인

2.x 스프링 버전 올라오면서 버퍼 사이즈가 262114 Bytes로 고정되었다고 한다.

소스코드에서 이 사이즈를 변경하거나 제한을 없애주어야 한다.

 

# 해결

ExchangeStrategies 객체 생성하는 로직에서 maxInMemorySize 함수를 호출한다.

함수의 인자로 메모리 사이즈를 bytes 단위로 기입하거나, 무제한일 경우 -1을 입력한다.

예를 들어, 버퍼사이즈를 최대 50MB 사용하겠다면 .maxInMemorySize(50 * 1024 * 1024)을 입력한다.

사이즈를 제한하지 않겠다면 .maxInMemorySize(-1)을 입력한다.

    ExchangeStrategies strategies = ExchangeStrategies
        .builder()
        .codecs(configurer -> {
            configurer
                .defaultCodecs()
                .maxInMemorySize(-1);       // unlimited buffer size (default: 256k)
        });
                
                
    WebClient webClient = WebClient.builder()
        .exchangeStrategies(strategies)
        .build();

 


※ 참고

https://garyj.tistory.com/22

 

[Spring] DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 에러에 대한 해결 책

최근 Spring의 버전 업데이트를 했는데 갑자기 WebClient에서 아래와 같은 에러가 발생한다. org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 at..

garyj.tistory.com