AWS ALB 504 Gateway Timeout

정의 (Definition)

AWS ALB에서 HTTP 504 Gateway Timeout은 로드 밸런서가 백엔드(Target)에 요청을 보냈으나, 정해진 시간(Connection Timeout 또는 Idle Timeout) 내에 응답을 받지 못한 상태입니다.

문제가 되는 배경 (Problem Context)

“서버가 느린 것인가, 네트워크가 막힌 것인가?”를 판단해야 합니다. 504는 요청이 백엔드까지 갔다가 처리가 늦어지는 경우(Application Slow)와, 아예 방화벽에 막혀 도달하지 못한 경우(Network Drop) 모두에서 발생할 수 있습니다.

핵심 메커니즘 (How it Works)

두 가지 타임아웃이 관여합니다.

  1. Connection Timeout (10초): ALB가 백엔드와 TCP 핸드셰이크를 시도했으나 10초간 응답이 없음. (주로 Security Group/NACL 문제)
  2. Idle Timeout (기본 60초): 연결은 됐고 요청도 보냈으나, 백엔드가 60초 동안 응답 헤더를 보내지 않음. (주로 Slow Query, 외부 API 지연, 이벤트 루프 블로킹)

불변 조건과 보장 범위 (Invariants & Guarantees)

  • 보장: 504는 ALB가 기다림을 포기한 것입니다. 백엔드 작업이 실제로 중단되었는지, 아니면 계속 돌고 있는지는 보장하지 않습니다(클라이언트는 끊겼지만 서버는 계속 돌 수 있음).

비유 (Analogy)

  • 504 Error: “전화(ALB)를 걸었는데, 신호만 가고 안 받거나(Connection Timeout), 받았는데 아무 말 없이 침묵만 흐르는(Idle Timeout) 상황”입니다.

실무적 함의 (Operational Implications)

  • 응답 시간 모니터링: ALB의 TargetResponseTime 메트릭이 Idle Timeout 설정값 근처에서 잘린다면 애플리케이션 성능 문제입니다.
  • 네트워크 점검: 배포 직후 모든 요청이 504라면 Security Group(Inbound/Outbound) 설정을 의심해야 합니다.

주의사항 / 오해 (Pitfalls & Misconceptions)

  • “ALB Timeout만 늘리면 된다?”: Timeout을 늘리는 건 임시방편입니다. 근본적인 Slow Query나 로직 지연을 해결해야 합니다.
  • 502와의 차이: 504는 “기다리다 지쳐서” 끊는 것이고, 502는 “잘못된 응답을 받아서” 끊는 것입니다.

References