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 문제를 확인하는 순서
실무에서는 다음 순서대로 점검하는 것이 가장 효율적입니다.
- SSH KeepAlive 설정 확인
- 클라이언트 KeepAlive 설정
- Ping 테스트
- SSH 로그 확인
- CPU 및 메모리 확인
- 디스크 확인
- 방화벽 세션 확인
- TCP 연결 상태 확인
- 애플리케이션 로그 확인
- VPN 및 프록시 확인
이 순서대로 확인하면 대부분의 원인을 빠르게 찾을 수 있습니다.
Broken pipe와 Connection reset by peer의 차이
| 오류 | 의미 |
|---|---|
| Broken pipe | 데이터를 보내는 도중 상대방 연결이 이미 종료됨 |
| Connection reset by peer | 상대방이 TCP 연결을 강제로 종료함 |
두 오류 모두 연결 종료와 관련 있지만 발생 시점과 원인이 조금 다릅니다.
자주 묻는 질문
SSH 작업 중 자꾸 Broken pipe가 발생합니다.
대부분 KeepAlive 설정이 없거나 네트워크가 불안정한 경우입니다. ServerAliveInterval과 ClientAliveInterval을 설정하면 많은 경우 해결됩니다.
대용량 파일 복사 중 Broken pipe가 발생합니다.
네트워크 품질 저하, VPN 연결 끊김, 방화벽 세션 종료 등을 확인해야 합니다.
웹 서버에서도 Broken pipe가 발생할 수 있나요?
네. 클라이언트가 요청을 중간에 취소하거나 프록시 서버가 연결을 종료한 경우에도 발생할 수 있습니다.
마무리
Broken pipe 오류는 Linux 서버에서 SSH, 웹 서버, API 서버 등 다양한 환경에서 자주 발생하는 네트워크 오류입니다. KeepAlive 설정, 네트워크 품질, 방화벽 세션, 시스템 리소스 등을 차례대로 점검하면 대부분의 원인을 빠르게 해결할 수 있습니다. 특히 장시간 SSH 작업이 많은 환경이라면 KeepAlive 설정을 적용해 두는 것이 안정적인 서버 운영에 도움이 됩니다.