반응형
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()
)
반응형
'[SpringBoot]' 카테고리의 다른 글
Spring Data JPA 에는 ON DUPLICATE KEY UPDATE 가 없다 ! 어떻게 해야할까 ! (0) | 2024.08.26 |
---|---|
Spring Kotlin - WebClient 인코딩 주의사항 ! (0) | 2024.08.18 |
내가 두고두고 쓰는 Docker 설정들 총 정리 (EC2 & NginX & SpringBoot & MySQL) (0) | 2024.04.10 |
게시글 읽어올 때, 좋아요 수랑 댓글 수를 어떻게 처리할 것인가? (0) | 2024.04.10 |
[Kotlin + Spring] 내가 QueryDSL을 도입하게 된 이유 (0) | 2024.04.08 |