1. 에러 개요
다음과 같은 에러 메시지가 로그에 출력되었습니다.
org.springframework.web.client.ResourceAccessException:
I/O error on POST request for [내부 서버 주소]: Connection reset
이는 시스템 A에서 내부 시스템 B의 인증 API를 호출하려 했지만, 상대방 서버 측에서 연결을 강제로 종료시켜 발생한 네트워크 오류입니다.
2. 에러의 의미
Connection reset
은 클라이언트가 요청을 보냈지만, 상대 서버가 응답을 주지 않고 연결을 끊어버린 상황을 의미합니다.
보통 이는 응답 처리 중 문제가 발생했거나, 서버가 아예 요청을 수신하지 못한 경우에도 발생할 수 있습니다.
3. 발생 가능한 원인
다음과 같은 원인들이 있을 수 있습니다.
- 상대 서버(B)의 서비스가 정상적으로 동작하지 않음 (예: 종료됨, 포트 미오픈, 과부하)
- API 경로가 잘못되어 존재하지 않는 경로로 요청됨
- 요청에 필요한 인증 정보(예: 토큰, 헤더 등)가 누락됨
- 클러스터 내부 DNS가 제대로 작동하지 않아 주소를 해석하지 못함
- 네트워크 자체의 일시적 장애나 설정 문제
4. 확인 및 해결 방법
문제를 해결하기 위해 아래 항목을 순차적으로 확인해보는 것이 좋습니다.
- 상대 서버 상태 확인
대상 서버가 정상적으로 기동되어 있는지 확인합니다. (kubectl get pods
또는 헬스 체크) - API 엔드포인트 점검
요청하려는 경로와 포트 번호가 올바른지 재확인합니다. - 직접 호출 테스트
서버 A 내 터미널에서curl
명령어 등으로 API를 직접 호출해 실제 응답을 확인합니다. - 인증 및 요청 포맷 점검
필요한 토큰, 헤더 등의 정보가 요청에 제대로 포함되어 있는지 확인합니다. - 상대 서버 로그 확인
상대 서버 로그를 통해 요청이 도달했는지, 어떤 이유로 연결을 끊었는지 확인합니다. - 네트워크 및 DNS 점검
내부 DNS나 네트워크 설정 오류로 인해 통신이 불가능한 상태는 아닌지 점검합니다.
5. 결론
이 에러는 내부 시스템 간 통신 중 상대 서버가 연결을 강제로 끊은 경우에 발생합니다.
대부분 상대 서버의 상태 문제, API 요청 형식 오류, 또는 네트워크 설정 이슈로 발생할 수 있으며,
서버 상태 확인과 로그 분석을 통해 원인을 구체적으로 파악해야 합니다.
반응형
'개발 (Development) > Java' 카테고리의 다른 글
[Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기) (2) | 2025.07.20 |
---|---|
[Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법 (2) | 2025.07.20 |
[Java] LinkedHashMap에서 특정 값을 가진 항목 제거하는 방법 (0) | 2025.07.05 |
[Java/SpringBoot] Spring OAuth2 시스템에서 발생한 Access Token 만료 및 인증 오류 대응 기록 (2) | 2025.06.28 |
[Java/SpringBoot] Spring에서 예외를 던지지 않고 API 응답은 유지하며 로그는 ERROR로 남기지 않도록 처리하는 방법 (0) | 2025.06.28 |