운영중인 전산에서 간헐적으로 Broken pipe나 SocketTimeoutException가 발생하는 문제가 있었다
인터넷에 찾아보니 Socket통신시에 양 측에서 통신도중에 한쪽이 강제로 끊겼을 때
아직 연결되어 있는 측에서 데이터를 보내려고 하는 경우 발생한다고 한다
하지만 전산 내 사용하는 Socket통신의 코드를 봐도 예외가 날 부분이 없었고 예외처리도 되어있는데 계속 예외가 발생했다.
결론만 말하자면 프론트엔드는 이미 연결이 종료되었으나 백엔드에서 응답을 보내려고 해 발생하던 오류였다
계속 찾다보니 화면단에서 많은 리소스를 차지하는 파일 다운로드 기능이 있었는데
요청 후 정해진 시간내에도 백엔드에서 응답을 받지못해 오류가 발생하고
그 뒤 백엔드에서 요청을 처리하고 프론트엔드로 반환하던 중 Broken pipe예외가 발생한다.
자세한 정보는 AI에게 문의해 알아봤다
주요 원인
- 사용자가 프론트엔드(React) 화면을 닫거나 새로고침 등으로 요청을 보낸 후 연결을 끊었을 때, 백엔드가 아직 응답을 보내지 못한 상태라면, 백엔드가 데이터를 보내려 할 때 Broken pipe 예외가 발생합니다.
- 서버가 응답을 보내기 전에 프론트엔드에서 타임아웃이 발생하거나, 네트워크 문제로 연결이 끊겨도 동일한 현상이 나타날 수 있습니다.
Socket 사용 여부
- HTTP 통신(axios 등)은 내부적으로 TCP 소켓을 사용합니다. 즉, 특별히 WebSocket이나 TCP 소켓 프로그래밍을 하지 않아도, HTTP 요청/응답 자체가 소켓 위에서 동작합니다.
- Broken pipe 예외가 발생했다는 것은 꼭 "소켓 프로그래밍"을 직접 하고 있다는 뜻이 아니라, HTTP 연결(즉, 소켓 연결)에서 한쪽이 먼저 연결을 끊었기 때문입니다.
현재 프론트는 react를 사용하고 있는데 react에서 변경사항을 감지하거나 변경사항을 번들링할 때 서버와 소켓통신을 한다고 한다.
지금까지 직접 구현한 소켓통신이 문젠줄 알고 계속 찾아봤었는데 찾을 수 없는게 정상이었다.
'dev' 카테고리의 다른 글
[JAVA] Broken pipe, SocketTimeoutException 발생 원인 분석 - 2 (1) | 2025.06.27 |
---|---|
[sourceTree] 업데이트 이후 브랜치가 접혀서 표시될 때 (0) | 2025.03.27 |
[dbeaver] 24.3.2 버전 업데이트 이후 자동완성 지연문제 (0) | 2025.01.06 |
[sheetJS] 엑셀 날짜형식 데이터 숫자출력 문제 (0) | 2024.07.05 |
[react] <> 에 key값 넣기 (0) | 2024.05.20 |