참고
RAG 파이프라인을 진행하던 중, 3가지의 서버 쪽 에러를 발견했다.
이에 대해 아래에 정리해보고자 한다.
- 500 Internal Server Error
- Connection reset by peer
- broken pipe error
500 Internal Server Error
✨ 500 에러는 웹 서버에서 에기치 않은 오류가 발생하여 요청을 처리할 수 없을 때 나타나는 일반적인 HTTP 오류이다.
- 서버가 클라이언트로부터 받은 요청을 처리하는 도중에 예상치 못한 오류로 인해 요청 미완료
클라이언트(브라우저)가 아니라 서버 자체의 문제로 인해 발생한다.

해당 오류는 서버 측의 문제로, 웹사이트 관리자가 해결하는 경우가 다수이지만, 사용자 측에서는 페이지 새로고침/브라우저 캐시 및 쿠키 삭제/다른 브라우저나 장치로 시도하는 등의 방법을 시도해볼 수 있다.
500 에러의 원인은 아래와 같다.
- 웹 애플리케이션 코드 오류: 서버에서 실행되는 코드에 버그 존재
- 서버 구성 문제: 서버 설정 오류
- 데이터베이스 연결 실패: 서버와 DB 간 연결에 문제 발생
- 리소스 부족: 서버 리소스 부족
서버 관리자는 아래와 같은 방법을 시도해볼 수 있다.
- 로그 파일 분석: 어떤 요청이 오류를 발생시켰는지 파악
- 코드 검토: 웹 애플리케이션 코드 검토
- 구성 검토: 서버 구성 설정 검토 및 잘못된 설정 수정
- 서버 재시작: 일시적인 해결책에 불과, 근본적 문제 해결 필요
[Errno 104] Connection reset by peer
✨ Connection reset by peer 에러는 상대방이 강제로 연결을 종료했을 때 시스템이 표시하는 메시지이다.
- peer: 통신을 주고받는 상대방 (예: 클라이언트가 서버의 peer, 또는 그 반대)
- reset: 강제로 연결을 끊는 것
→ TCP 연결을 종료할 때는 보통 FIN/ACK 신호를 통해 정상적으로 마무리하지만, 상대방이 갑자기 RST(Reset) 패킷을 보내면서 연결을 즉시 끊으면 해당 오류가 발생한다.
Python - ConnectionResetError: [Errno 104] Connection reset by peer
해당 오류는 다양한 이유로 발생할 수 있다.
- 클라이언트가 갑자기 연결을 종료: 새로고침, 탭 닫기, 네트워크 불안정으로 연결 끊기는 경우
- 서버/프록시가 세션 강제 종료: 유휴 연결 오래 유지하지 않기 위해 서버가 끊는 경우, 세션 풀에서 만료된 연결을 재사용하지 않도록 차단할 때
- 네트워크 장애나 패킷 손실 발생
- 방화벽의 세션 정리
해당 오류로 인해 사용자/서버 측에는 다음과 같은 영향을 줄 수 있다.
- 사용자
- 웹페이지 중단
- 파일 다운로드 중단
- 엡 요청 실패
- 서버
- [Errno 104] Connection reset by peer 예외 발생
- 특히 DB나 메시지 큐를 사용하는 트랜잭션 중에 이 오류가 발생하면, 데이터 처리의 실패나 롤백으로 이어질 수 있다.
[Errno 32] Broken pipe
우선, pipe에 대해 정리해보자
- A 프로세스에서 생긴 출력을 → B 프로세스의 입력으로 연결하는 수단 을 Pipe라 생각하자
✨ 그렇다면, 파이프 부러짐 (Broken Pipe)이라는 건 아래와 같이 정리할 수 있다.
- 파이프가 부러졌다는 것은?
- ⚙️ 후자의 프로세스가 먼저 종료되어서
- 전자 프로세스에서 전달되는 표준출력을 파이프를 통해 후자 프로세스의 표준입력에 전달하려고 시도했을 때, 후자 프로세스가 받아들이지 못하는 상황을 의미한다.

우리가 사용하는 운영체제에서는 Broken Pipe가 발생했을 때, 전자 프로세스에게 pipe가 부러졌다는 신호를 SIGPIPE라는 시그널로 알린다.
- Python은 이를 BrokenPipeError로 변환시켜 에러를 알린다.

뭐야 개쩌네요
원래 기술블로그는 취업과 함께 사라지는거 아니었나요
이걸 계속 쓰다니 개멋있으오