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가 응답을 만들어 줌
그래서 “서버가 죽었는데도 코드를 받는” 경험을 한 것.
설명:
1. 백엔드 죽음/타임아웃 → LB가 502 Bad Gateway / 503 Service Unavailable / 504 Gateway Tiemout 생성
⇒ 이 5xx는 백엔드가 아니라 LB가 만든 값
⇒ ALB 기준: 백엔드가 응답을 못 주거나 비정상이면 LB가 자기 판단으로 5xx 반환