본문 바로가기
[SpringBoot]

Exceeded limit on max bytes to buffer: 해결하기

by Hevton 2024. 11. 5.
반응형



AWS EC2 서버에서 크롤링을 진행하는 과정에서 문제가 발생하였다.

API 호출에 대해 3번까지 retry를 걸었지만, 3번 모두 실패한 경우가 발생하였고

특정 페이지 특정 데이터를 가져오려고 할 때에만 문제가 발생한다는 특이점을 얻었다.

 

처음 마주한 Exception은 아래와 같았다

org.springframework.web.reactive.function.client.WebClientResponseException: 200 OK from GET

 

내 EC2 서버에서는 WebClient를 사용했고, 이 에러는 WebClient를 사용해서 데이터는 200 OK로 성공적으로 호출했으나

데이터 변환 등의 과정에서 문제가 발생했다는 오류였다.

 

곧바로 내 로컬 서버에서도 돌려본 결과 마찬가지로 특정 페이지에 대해서만 동일한 오류가 발생한다는 것을 알게 되었다.

그리고 디버깅을 하다 보니 아래와 같은 cause를 확인했다.

org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144

 

SpringBoot에서는 기본적으로 버퍼를 제한하고 있다고 한다.

가져오려는 데이터가 이 버퍼를 초과하였기 때문에 위와 같은 오류가 발생했다.

 

버퍼를 늘려주는 방법은 아래와 같이 WebClient의 코덱 설정을 수정해주면 된다.

버퍼를 제한한 것엔 그만큼의 이유가 있기도 하니까, 무작정 limit 없이 늘려주지 말고 필요한 만큼만 늘려줘야 한다.

나는 필요로 인해 10MB로 설정해주었다.

WebClient.builder()
    .exchangeStrategies(
        ExchangeStrategies.builder()
            .codecs { configurer ->
                configurer.defaultCodecs().maxInMemorySize(10 * 1024 * 1024) // 10MB 설정
            }
            .build()
    )

 

반응형