본문 바로가기
Computer Science/HTTP Sepcification

[HTTP] HttpClient recvAddress(..) failed: Connection reset by peer 문제해결 과정기 -상-

by Dev. Pluto 2024. 3. 9.
반응형

 

안녕하세요 Dev. Pluto입니다. 

 

며칠 전 새로운 오류가 하나 발생해서, 어떤 문제였고 어떻게 해결했으며

그 과정중에 어떤것을 느끼고 배웠는지 블로그에 정리하며 복습해보는 시간을 가져보겠습니다.

 

목차

  • 문제상황
  • 원인분석
  • 대응내용
  • 미흡했던 부분 반성

 

문제상황

소셜 플랫폼에 동영상을 공유하는 서비스를 유지보수 하고 있던 도중 FaceBook, Instagram에 직접 api 통신하는 서버에서

다음과 같은 로그가 발생했었습니다. 

 

org.springframework.web.reactive.function.client.WebClientRequestException: 
recvAddress(..) failed: Connection reset by peer

 

발생환경

Kotiln/spring boot webflux server (Reactor Netty use)

WebClient를 사용해서 Meta Garph Batch Api를 사용

개발 망, 상용 배포 이전 Staging 망 두 환경에서 발생 (상용 환경에서는 아직 발생한 경우 없었음)

 

발생상황 

Meta 측으로 Feed 게시 api 를 요청하고, 응답이 오기 전 위의 예외가 발생하면서 Feed 게시 처리가 정상적으로 진행되지 않고

비정상 종료

 

 

원인분석 

(계속 분석 중이며 정확한 원인이 나오는대로 업데이트 중입니다. 원인이 정확하지 않을 수 있습니다.)

현재 Alpha, Beta(상용망 배포 직전의 Staging영역을 통칭) 환경에서 각각의 VPC환경 내부에
서비스 들이 MSA와 유사한 구조로 배치되어있는 구조입니다. 

 

각각의 서비스들은 VPC 안에서 public subnet으로 기존에 인터넷과 통신하던 구조였습니다. 

하지만 이번에 AWS과금 정책이 변경되면서 VPC에 대한 Ipv4 public ip 요금이 부과되기 시작하였습니다.

 

 

 

따라서 VPC 내부의 서비스들도 공개 IP할당을 제거하고
private subnet 구성을 통해 외부 인터넷과 통신하는 방식을 변경하였습니다.

 

이때, 기존의 공개 IP 구성으로 설정돼있던 서비스가 외부 인터넷(Meta Graph Api)과 통신할땐

AWS의 IGW를 통해 비교적 간단하고 빠르게 요청과 응답을 받을 수 있었던 반면 

 

private subnet 구성으로 변경된 이후 VPC 내부의 NAT GateWay로의 추가적인 라우팅이나

처리가 필요해지면서 Http 의 TilmeOut이 발생한 것으로 추정되었습니다 

 

 

대응내용

1차 대응

 - 처음에는 구글에 검색한 결과들이 대부분 Http Connection Pool의 설정 관련된 Connection IdleTime을 조금 더 여유롭게 

늘려주는 식의 해결 사례를 확인하고 저의 문제에 적용하였습니다. 

 

2차대응

 - 정확하게 문제를 파악해 보니, 커넥션 풀에 대한 문제가 아니었고 Meta 플랫폼에 요청을 보낼 때 ReadTimeOut이 발생한다는

것을 파악하고 Http ReadTimeOut / WriteTimeOut을 여유롭게 설정하여 대응하였습니다

 

 

미흡했던 부분 반성

처음 이슈를 마주했을 때 예외 로그를 구글에 검색하면서 트러블 슈팅을 시작하였습니다.

검색 선례들을 보면 대부분 HttpClient의 Connection Pool 에 관한 MaxIdleTime이나, Acquire시간과 같은

커넥션 풀에 대한 설정을 통해 문제들을 해결하였던 것을 보고 

 

제가 직면하였던 문제와 fit하지 않음에도 단순히 따라해보고 이를 배포 환경에 적용하려 하였다는 부분이었습니다. 

물론 이번 문제를 통해 Http통신의 TimeOut에 대해서도 깊게 공부를 하였습니다

 

검색 결과로만 나왔던 Connection Pool에 대한 문제에만 매몰되지 않고

다른 부분에서는 문제될 만한게 없었는지. 있었다면 내가 모르는 부분인지 생각해서

정확하게 문제를 파악하는게 먼저다 느꼈습니다. 

 

 

 

다음 글에서는

이번 이슈를 해결해가면서 공부한 

HttpTimeOut의 종류에 대해서 알아보겠습니다.

 

관련링크

 

24년 2월부터 AWS의 Public IPv4 주소의 요금 정책이 변경됩니다 | DevelopersIO

24년 2월부터 적용되는 퍼블릭 IPv4 주소의 요금 변경 체계에 대하여 설명한 글입니다

dev.classmethod.jp

 

반응형

'Computer Science > HTTP Sepcification' 카테고리의 다른 글

[HTTP] 세션?? 쿠키??  (0) 2022.04.13