궁금했던 점

Server Down 시 4XX/5XX에 대한 응답을 누가 만들어주는지?

설명

4xx/5xx는 HTTP 프로토콜 자체의 상태 코드

응답을 보내는 주체가 누구든(Application Server, Web Server, Proxy, LB) 다 만들 수 있음

LB가 없어도 당연히 응답을 전달 받음

누가 보내는가?


상태 코드는 “응답을 끝까지 만들어낸 가장 가까운 주체”가 보내는 것

LB없이 클라이언트 → 서버 직접 연결인 경우:

경우 1. 서버 애플리케이션이 살아있고 로직상 에러 → 서버가 직접 4xx/5xx보냄(EX. Spring이 전달)

경우 2. 서버 프로세스가 완전히 죽어서 포트가 안 열려있음 → 애초에 TCP 연결 자체가 안 됨 → Connection refuesed

⇒ 이건 HTTP 응답이 아니라 TCP 레벨 에러5xx 같은 코드가 안 옴

LB가 있을 때 달라지는 것


LB가 있으면 백엔드가 죽었을 때 LB가 응답을 만들어 줌

그래서 “서버가 죽었는데도 코드를 받는” 경험을 한 것.

설명:

1. 백엔드 죽음/타임아웃 → LB가 502 Bad Gateway / 503 Service Unavailable / 504 Gateway Tiemout 생성

⇒ 이 5xx는 백엔드가 아니라 LB가 만든 값

ALB 기준: 백엔드가 응답을 못 주거나 비정상이면 LB가 자기 판단으로 5xx 반환

정리