[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법

2025. 7. 13. 00:12·개발 (Development)/Java

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. 확인 및 해결 방법

문제를 해결하기 위해 아래 항목을 순차적으로 확인해보는 것이 좋습니다.

  1. 상대 서버 상태 확인
    대상 서버가 정상적으로 기동되어 있는지 확인합니다. (kubectl get pods 또는 헬스 체크)
  2. API 엔드포인트 점검
    요청하려는 경로와 포트 번호가 올바른지 재확인합니다.
  3. 직접 호출 테스트
    서버 A 내 터미널에서 curl 명령어 등으로 API를 직접 호출해 실제 응답을 확인합니다.
  4. 인증 및 요청 포맷 점검
    필요한 토큰, 헤더 등의 정보가 요청에 제대로 포함되어 있는지 확인합니다.
  5. 상대 서버 로그 확인
    상대 서버 로그를 통해 요청이 도달했는지, 어떤 이유로 연결을 끊었는지 확인합니다.
  6. 네트워크 및 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
'개발 (Development)/Java' 카테고리의 다른 글
  • [Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기)
  • [Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법
  • [Java] LinkedHashMap에서 특정 값을 가진 항목 제거하는 방법
  • [Java/SpringBoot] Spring OAuth2 시스템에서 발생한 Access Token 만료 및 인증 오류 대응 기록
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JSON
    Vue.js
    AWS
    데이터분석
    javascript
    java
    springboot
    python
    timescaledb
    리눅스 마스터 2급
    Linux master
    PostgreSQL
    Spring boot
    Kafka
    오답노트
    자바
    DevOps
    deepseek
    JPA
    백준온라인저지
    docker
    MyBatis
    ADsP
    백준알고리즘
    리눅스 마스터 2급 2차
    Kubernetes
    pandas
    백준자바
    백준
    Linux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법
상단으로

티스토리툴바