01
502와 504는 프록시가 뒤쪽과 실패한 것입니다.
둘 다 Nginx · Caddy 같은 프록시가 뒤쪽 앱과 이야기하다 실패한 경우입니다. 502는 앱이 이상한 응답을 돌려줬거나 아예 받지 못한 것이고, 504는 제때 답이 오지 않은 것입니다. 두 경우 모두 프록시 설정보다 앱이 살아 있는지, 어느 포트를 듣고 있는지부터 봐야 합니다.
SERVER ERROR CLINIC
오류 코드는 무엇이 고장났는지가 아니라 어디까지 갔다가 실패했는지를 알려줍니다. 하나씩 답하면 확인할 곳이 줄어듭니다.
이 도구는 여러분의 서버에 접속하지 않습니다. 답한 내용만으로 확인할 순서를 정해주는 도구이며, 실제 로그를 대신하지 않습니다.
오류 코드는 어디까지 갔다가 실패했는지를 알려줍니다
이 도구에 대하여
오류 코드는 무엇이 고장났는지가 아니라, 요청이 어디까지 갔다가 실패했는지를 알려줍니다. 그래서 코드만 봐도 어느 로그를 먼저 열지 정할 수 있습니다. 장애가 났을 때 가장 많이 낭비되는 시간이 어디부터 볼지 정하지 못한 채 여기저기 열어 보는 구간인데, 이 도구는 그 첫 선택을 대신 좁혀 줍니다. 원인을 찾아 주는 것이 아니라 확인할 순서를 정해 주는 도구라고 보는 편이 정확합니다.
01
502와 504는 프록시가 뒤쪽과 실패한 것입니다.
둘 다 Nginx · Caddy 같은 프록시가 뒤쪽 앱과 이야기하다 실패한 경우입니다. 502는 앱이 이상한 응답을 돌려줬거나 아예 받지 못한 것이고, 504는 제때 답이 오지 않은 것입니다. 두 경우 모두 프록시 설정보다 앱이 살아 있는지, 어느 포트를 듣고 있는지부터 봐야 합니다.
02
500과 503은 앱 쪽 이야기입니다.
500은 앱 안에서 예외가 나 요청을 끝내지 못한 것이라 앱 로그의 스택 트레이스가 답을 가지고 있습니다. 503은 앱이 지금 요청을 받을 준비가 되지 않았다는 뜻이라 기동 중이거나 과부하 · 점검 상태를 의심합니다.
03
한 번에 하나씩만 바꿉니다.
여러 곳을 동시에 손대면 무엇이 문제를 고쳤는지 알 수 없습니다. 이 도구는 답 하나에 후보를 하나씩 줄이는 순서를 유지해, 마지막에 무엇을 근거로 그 원인에 도달했는지 되짚을 수 있게 합니다.
04
코드는 계층을 가리킵니다.
요청은 프록시를 지나 앱에 닿습니다. 프록시가 앱과 이야기하다 실패했는지, 앱이 요청을 받았지만 처리에 실패했는지에 따라 돌려주는 코드가 달라집니다. 그래서 코드 하나만 알아도 로그를 열 순서가 정해지고, 아무 로그나 먼저 열어 보는 것보다 훨씬 빨리 좁힐 수 있습니다.
05
연결 단계의 오류는 이름이 다릅니다.
HTTP 상태 코드가 나오려면 최소한 응답이 돌아와야 합니다. 아예 연결이 안 되면 그 전 단계에서 실패한 것이라 다른 이름의 오류가 뜹니다. 거절당한 것인지, 시간이 초과된 것인지, 이름을 못 찾은 것인지, 포트가 이미 쓰이고 있는지가 각각 다른 원인을 가리키므로 이 도구도 그 이름들을 함께 다룹니다.
06
즉시와 지연이 원인을 가릅니다.
같은 접속 실패라도 곧바로 실패하는 것과 한참 기다리다 실패하는 것은 원인이 다릅니다. 즉시 거절은 상대가 그 자리에 없다는 답을 돌려준 것이고, 오래 걸리는 실패는 중간에서 조용히 버려져 답 자체가 오지 않는 상황입니다. 이 도구가 시간을 묻는 질문을 두는 이유입니다.
07
근거를 함께 남깁니다.
각 후보가 왜 남았고 왜 빠졌는지를 화면에 적어 둡니다. 결론만 제시하면 그것이 맞는지 사람이 판단할 수 없고, 틀렸을 때 어디서 어긋났는지도 찾을 수 없습니다. 진단 도구의 출력은 답보다 근거가 중요하다고 봤습니다.
08
메시지를 그대로 붙여 넣을 수 있습니다.
코드를 고르는 대신 오류 메시지를 그대로 붙여 넣어도 됩니다. 실제 상황에서는 코드가 무엇인지 파악하기 전에 메시지 덩어리부터 손에 들어오기 때문입니다. 화면이 그 안에서 알아볼 수 있는 표시를 찾아 시작 지점을 잡아 줍니다.
09
질문이 코드마다 달라집니다.
모든 코드에 같은 질문을 던지면 대부분이 의미 없는 확인이 됩니다. 그래서 코드에 따라 남아 있는 후보가 다르고, 그 후보들을 가장 잘 가르는 질문이 먼저 나오도록 순서를 잡았습니다. 답 하나로 절반씩 줄어드는 것이 이상적인 진단 순서입니다.
10
확인 명령을 함께 줍니다.
무엇을 의심하라는 말만으로는 다음 행동으로 이어지지 않습니다. 그래서 각 후보마다 실제로 실행해 볼 수 있는 한 줄을 붙여 두었습니다. 프로세스가 살아 있는지, 어느 포트를 듣고 있는지, 그 포트로 연결이 되는지를 확인하는 명령들이며 순서대로 실행하면 후보가 줄어듭니다. 다만 환경마다 명령이 조금씩 다르므로 그대로 되지 않으면 같은 목적의 다른 명령을 찾아 써야 합니다.
서버에 접속하지 않습니다.
이 도구는 여러분의 서버나 네트워크에 전혀 접속하지 않습니다. 화면에서 답한 내용만으로 확인할 순서를 정해주는 것이라, 실제 로그와 모니터링을 대신하지 않습니다. 다루는 코드는 HTTP 502 · 504 · 500 · 503과 ECONNREFUSED · ETIMEDOUT · EADDRINUSE · ENOTFOUND이며, 실제 원인은 프록시 설정, 컨테이너 구성, 방화벽 규칙에 따라 달라질 수 있습니다. 이 도구가 제시하는 순서는 흔한 경우를 기준으로 한 것이라 드문 원인은 목록에 없을 수 있고, 여러 원인이 겹쳐 있으면 하나를 고쳐도 증상이 남습니다. 최종 판단은 실제 로그와 모니터링 지표로 해야 하며, 화면에 나오는 명령도 환경에 맞게 고쳐 써야 합니다.
실험을 마쳤다면