Linux Broken pipe 오류가 발생하는 원인과 해결 방법

Linux 서버를 운영하다 보면 SSH 접속, 파일 전송, 웹 서버, API 서버 등을 사용하는 과정에서 Broken pipe라는 오류를 만나는 경우가 있습니다. 이 오류는 네트워크 연결이 유지되는 도중 한쪽에서 연결이 끊어져 데이터를 더 이상 전송할 수 없을 때 발생하는 대표적인 네트워크 오류입니다.

특히 SSH 작업 중 장시간 입력이 없거나, 대용량 파일 전송 도중 네트워크가 불안정한 경우 자주 발생합니다. 또한 웹 서버와 애플리케이션 서버 간 연결이 끊어질 때도 동일한 오류가 나타날 수 있습니다.

이번 글에서는 Linux에서 Broken pipe 오류가 발생하는 원인과 해결 방법을 알아보겠습니다.

Broken pipe란 무엇인가?

Broken pipe는 데이터를 전송하려고 했지만 상대방이 이미 연결을 종료한 상태에서 발생하는 오류입니다.

대표적인 오류 예시는 다음과 같습니다.

Write failed: Broken pipe

또는

client_loop: send disconnect: Broken pipe

또는

Broken pipe (Errno 32)

즉, 연결은 생성되었지만 통신 중간에 끊어진 상태를 의미합니다.

Broken pipe가 발생하는 대표적인 원인

다음과 같은 경우에 자주 발생합니다.

  • SSH Idle Timeout
  • 네트워크 끊김
  • VPN 연결 종료
  • 서버 재시작
  • 방화벽 세션 종료
  • KeepAlive 미설정
  • TCP Timeout
  • 애플리케이션 비정상 종료
  • 프록시 서버 연결 종료
  • 클라이언트 강제 종료

실무에서는 SSH KeepAlive 설정과 네트워크 상태를 먼저 확인하는 것이 좋습니다.

1. SSH KeepAlive 설정 확인하기

SSH 서버 설정 파일을 확인합니다.

sudo vi /etc/ssh/sshd_config

다음 항목이 설정되어 있는지 확인합니다.

ClientAliveInterval 60
ClientAliveCountMax 3

설정 후 SSH 서비스를 재시작합니다.

sudo systemctl restart sshd

2. 클라이언트 KeepAlive 설정하기

클라이언트에서도 KeepAlive를 설정할 수 있습니다.

vi ~/.ssh/config

예시

Host *
ServerAliveInterval 60
ServerAliveCountMax 3

장시간 작업 시 연결이 끊기는 것을 방지할 수 있습니다.

3. 네트워크 연결 확인하기

네트워크가 불안정한지 확인합니다.

ping 서버IP

패킷 손실(Packet Loss)이 발생하는지 확인합니다.

4. 장시간 Ping 테스트하기

네트워크가 간헐적으로 끊기는 경우에는 지속적으로 확인합니다.

ping 서버IP

Linux에서는 Ctrl + C를 누를 때까지 계속 실행됩니다.

패킷 손실률이 높다면 네트워크 문제일 가능성이 큽니다.

5. SSH 로그 확인하기

SSH 로그를 확인합니다.

journalctl -u sshd

또는

grep ssh /var/log/auth.log

Ubuntu 계열에서 자주 사용하는 방법입니다.

6. 서버 리소스 확인하기

서버 과부하가 발생하면 연결이 끊길 수 있습니다.

CPU 사용률 확인

top

메모리 확인

free -h

디스크 확인

df -h

7. 방화벽 세션 확인하기

방화벽에서 일정 시간이 지나면 세션을 종료하는 경우가 있습니다.

Firewalld 상태 확인

firewall-cmd --state

기업 환경에서는 방화벽 장비의 Session Timeout도 함께 확인해야 합니다.

8. TCP 연결 상태 확인하기

현재 연결 상태를 확인합니다.

ss -tan

또는

netstat -tan

연결이 비정상적으로 종료되는지 확인합니다.

9. 애플리케이션 로그 확인하기

웹 서버나 API 서버에서도 Broken pipe가 발생할 수 있습니다.

Nginx 로그

journalctl -u nginx

Apache 로그

journalctl -u httpd

애플리케이션이 먼저 종료되었는지 확인합니다.

10. VPN 또는 프록시 확인하기

VPN이나 프록시를 사용하는 경우 세션 제한 시간이 짧게 설정되어 있을 수 있습니다.

VPN 연결을 해제한 뒤 동일한 문제가 발생하는지 확인하면 원인을 찾는 데 도움이 됩니다.

Broken pipe 문제를 확인하는 순서

실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.

  1. SSH KeepAlive 설정 확인
  2. 클라이언트 KeepAlive 설정
  3. Ping 테스트
  4. SSH 로그 확인
  5. CPU 및 메모리 확인
  6. 디스크 확인
  7. 방화벽 세션 확인
  8. TCP 연결 상태 확인
  9. 애플리케이션 로그 확인
  10. VPN 및 프록시 확인

이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.

Broken pipe와 Connection reset by peer의 차이

오류의미
Broken pipe데이터를 보내는 도중 상대방 연결이 이미 종료됨
Connection reset by peer상대방이 TCP 연결을 강제로 종료함

두 오류 모두 연결 종료와 관련 있지만 발생 시점과 원인이 조금 다릅니다.

자주 묻는 질문

SSH 작업 중 자꾸 Broken pipe가 발생합니다.

대부분 KeepAlive 설정이 없거나 네트워크가 불안정한 경우입니다. ServerAliveIntervalClientAliveInterval을 설정하면 많은 경우 해결됩니다.

대용량 파일 복사 중 Broken pipe가 발생합니다.

네트워크 품질 저하, VPN 연결 끊김, 방화벽 세션 종료 등을 확인해야 합니다.

웹 서버에서도 Broken pipe가 발생할 수 있나요?

네. 클라이언트가 요청을 중간에 취소하거나 프록시 서버가 연결을 종료한 경우에도 발생할 수 있습니다.

마무리

Broken pipe 오류는 Linux 서버에서 SSH, 웹 서버, API 서버 등 다양한 환경에서 자주 발생하는 네트워크 오류입니다. KeepAlive 설정, 네트워크 품질, 방화벽 세션, 시스템 리소스 등을 차례대로 점검하면 대부분의 원인을 빠르게 해결할 수 있습니다. 특히 장시간 SSH 작업이 많은 환경이라면 KeepAlive 설정을 적용해 두는 것이 안정적인 서버 운영에 도움이 됩니다.

댓글 남기기