idea·blog

SERVER ERROR CLINIC

서버 오류 진단소

오류 코드는 무엇이 고장났는지가 아니라 어디까지 갔다가 실패했는지를 알려줍니다. 하나씩 답하면 확인할 곳이 줄어듭니다.

이 도구는 여러분의 서버에 접속하지 않습니다. 답한 내용만으로 확인할 순서를 정해주는 도구이며, 실제 로그를 대신하지 않습니다.

오류 코드는 어디까지 갔다가 실패했는지를 알려줍니다

  1. 브라우저요청을 보낸 곳
  2. 인터넷이름 찾기·연결
  3. 프록시Nginx·Caddy
  4. Node·Spring·Django
  5. DB·외부 API앱이 부르는 곳
  1. 1증상을 고릅니다코드를 눌러도 되고 오류 메시지를 그대로 붙여넣어도 됩니다
  2. 2한 번에 한 가지만 답합니다명령 한 줄을 쳐보고 결과를 고르면 됩니다
  3. 3후보가 줄어듭니다남은 원인마다 확인할 명령과 그렇게 본 근거가 붙습니다

어떤 오류를 보고 계신가요?

이 도구에 대하여

코드는 실패한 지점을 알려줍니다

오류 코드는 무엇이 고장났는지가 아니라, 요청이 어디까지 갔다가 실패했는지를 알려줍니다. 그래서 코드만 봐도 어느 로그를 먼저 열지 정할 수 있습니다.

  1. 보고 있는 오류 코드를 고르거나, 오류 메시지를 그대로 붙여넣습니다.
  2. 묻는 명령을 한 줄 실행하고 그 결과를 고릅니다.
  3. 답할수록 남은 원인이 줄고, 원인마다 확인할 명령과 그렇게 판단한 근거가 함께 붙습니다.

코드를 나누는 기준

01

502와 504는 프록시가 뒤쪽과 실패한 것입니다.

둘 다 Nginx · Caddy 같은 프록시가 뒤쪽 앱과 이야기하다 실패한 경우입니다. 502는 앱이 이상한 응답을 돌려줬거나 아예 받지 못한 것이고, 504는 제때 답이 오지 않은 것입니다. 두 경우 모두 프록시 설정보다 앱이 살아 있는지, 어느 포트를 듣고 있는지부터 봐야 합니다.

02

500과 503은 앱 쪽 이야기입니다.

500은 앱 안에서 예외가 나 요청을 끝내지 못한 것이라 앱 로그의 스택 트레이스가 답을 가지고 있습니다. 503은 앱이 지금 요청을 받을 준비가 되지 않았다는 뜻이라 기동 중이거나 과부하 · 점검 상태를 의심합니다.

03

한 번에 하나씩만 바꿉니다.

여러 곳을 동시에 손대면 무엇이 문제를 고쳤는지 알 수 없습니다. 이 도구는 답 하나에 후보를 하나씩 줄이는 순서를 유지해, 마지막에 무엇을 근거로 그 원인에 도달했는지 되짚을 수 있게 합니다.

서버에 접속하지 않습니다.

이 도구는 여러분의 서버나 네트워크에 전혀 접속하지 않습니다. 화면에서 답한 내용만으로 확인할 순서를 정해주는 것이라, 실제 로그와 모니터링을 대신하지 않습니다. 다루는 코드는 HTTP 502 · 504 · 500 · 503과 ECONNREFUSED · ETIMEDOUT · EADDRINUSE · ENOTFOUND이며, 실제 원인은 프록시 설정, 컨테이너 구성, 방화벽 규칙에 따라 달라질 수 있습니다.

참고 자료RFC 9110 — HTTP Semantics (상태 코드 정의)

실험을 마쳤다면