504 Gateway Timeout

직접 답변
504 Gateway Timeout은 프록시, CDN, 로드 밸런서 또는 게이트웨이가 백엔드 응답을 기다리던 중 해당 게이트웨이의 타임아웃이 먼저 만료되었음을 의미합니다. 백엔드는 여전히 실행 중일 수 있으며, 일반적인 원인으로는 느린 데이터베이스 쿼리, 과부하된 워커, 장시간 실행되는 작업, 지연된 서드파티 서비스, 중간 계층의 제한적인 타임아웃 등이 있습니다. 타임아웃 설정을 변경하기 전에 백엔드에 직접 요청했을 때의 처리 시간과 전체 게이트웨이 경로를 통한 처리 시간을 비교하세요.
핵심 요점
- 504는 일반적으로 백엔드에 즉시 연결할 수 없다는 뜻이 아니라, 업스트림 응답에 너무 오래 걸렸다는 의미입니다.
- 보고서, 가져오기, 내보내기 또는 복잡한 검색만 실패한다면 먼저 해당 작업과 데이터베이스 처리를 조사하세요.
- 더 긴 프록시 타임아웃은 정상적으로 작동하며 실제로 더 많은 시간이 필요한 작업에만 적절합니다.
- 대규모 작업이나 느린 작업에서는 브라우저 요청을 계속 열어 두기보다 백그라운드 작업을 사용하는 편이 일반적으로 더 낫습니다.
- 백엔드에 직접 요청했을 때와 프록시, CDN 또는 로드 밸런서를 거쳤을 때의 처리 시간을 비교하면 장애가 발생한 계층을 파악하는 데 도움이 됩니다.
Site Administrator
이 오류의 의미와 확인 방법
- 브라우저가 즉시 실패하지 않고 기다린 후 504 Gateway Timeout을 표시합니다.
- 단순한 페이지는 계속 작동하지만 보고서, 대량 가져오기, 내보내기, 이미지 처리 또는 복잡한 검색이 실패합니다.
- 애플리케이션이 사용 중이거나 요청이 대기열에 들어가면 실패가 더 자주 발생합니다.
- 직접 테스트하면 백엔드가 응답하지만, 프록시, CDN 또는 로드 밸런서를 거친 동일한 요청은 타임아웃됩니다.
- 게이트웨이 로그에는 504가 반환되기 전에 업스트림 요청이 오랫동안 실행된 기록이 나타납니다.
- 브라우저가 타임아웃을 받은 후에도 애플리케이션이 계속 처리할 수 있습니다. 이때 작업을 재시도하면 중복 작업이나 중단된 작업이 남을 수 있습니다.
가능성이 높은 순서의 주요 원인
- 느리거나 차단된 데이터베이스 쿼리: 인덱스 누락, 테이블 증가, 비효율적인 쿼리, 잠금 경합으로 인해 애플리케이션이 게이트웨이 제한 시간을 초과할 때까지 대기할 수 있습니다.
- 백엔드 과부하 또는 대기열: 요청이 애플리케이션 워커, 데이터베이스 연결, CPU, 메모리 또는 기타 부족한 리소스를 기다리고 있을 수 있습니다.
- 실제로 오래 걸리는 동기 작업: 대규모 내보내기, 가져오기, 보고서 또는 파일 처리는 정상적인 작업일 수 있지만 일반적인 페이지 요청에는 적합하지 않을 수 있습니다.
- 느린 다운스트림 API 또는 webhook: 애플리케이션이 응답하기 전에 다른 서비스의 응답을 기다리고 있을 수 있습니다.
- 제한적인 프록시 또는 서버 타임아웃: Nginx, Apache, CDN 또는 로드 밸런서가 애플리케이션의 처리가 끝나기 전에 대기를 중단할 수 있습니다.
- 게이트웨이 계층 사이의 네트워크 문제: 애플리케이션 처리 시간만으로 지연이 설명되지 않는 경우, 특히 다중 서버 또는 다중 리전 배포에서는 지연, 간헐적인 패킷 손실 또는 라우팅 오류의 가능성이 더 높습니다.
해결 방법
1. 실패한 요청과 소요 시간 확인
504를 발생시킨 요청을 게이트웨이 및 애플리케이션 액세스 로그에서 확인하세요. 경로 또는 사용자 작업, 타임스탬프, 응답 시간, 상태, 그리고 모든 요청이 실패하는지 특정 작업만 실패하는지를 기록합니다.
보고서, 가져오기, 내보내기 또는 복잡한 검색만 실패한다면 장애를 전체 서버 중단으로 간주하기보다 해당 작업부터 조사하세요.
2. 백엔드와 전체 요청 경로 비교
권한이 있고 안전한 테스트 요청을 사용하여 백엔드에 직접 요청했을 때의 응답 시간과 프록시, CDN 또는 로드 밸런서를 거친 동일한 요청의 응답 시간을 비교하세요.
- 직접 요청과 게이트웨이를 통한 요청 모두 느리다면 애플리케이션, 데이터베이스, 용량 또는 의존 서비스가 원인일 가능성이 있습니다.
- 직접 요청은 빠르지만 프록시를 거친 요청이 실패한다면 중간 계층의 타임아웃, 라우팅 문제 또는 게이트웨이와 백엔드 사이의 네트워크 문제가 원인일 수 있습니다.
테스트를 위해 프로덕션 접근 제어를 우회하거나 상태를 변경하는 요청을 보내지 마세요.
3. 데이터베이스 처리 시간과 잠금 대기 조사
사용 중인 데이터베이스 플랫폼의 운영 지침에 따라 데이터베이스의 느린 쿼리 및 잠금 대기 진단 기능을 활성화하거나 결과를 확인하세요. 현재 활성화된 게이트웨이 타임아웃에 근접하거나 이를 초과하여 실행되는 쿼리를 찾습니다.
인덱스 누락, 비효율적인 조인 또는 필터, 테이블 증가, 잠금 경합을 확인하세요. 측정된 병목을 실제로 해결한다는 점을 확인한 후에만 쿼리를 최적화하거나, 처리할 데이터를 줄이거나, 인덱스를 추가하세요. 스키마 또는 인덱스 변경은 리소스를 사용하고 동시 작업에 영향을 줄 수 있으므로 데이터베이스 담당자와 조율하세요.
빠르게 완료되어야 하는 쿼리를 숨기기 위해 타임아웃을 늘리지 마세요.
4. 백엔드 용량과 대기열 확인
장애가 발생한 동안 애플리케이션, 웹 서버 및 시스템 메트릭에서 워커 고갈, 대기 중인 요청, 데이터베이스 연결 제한, CPU 또는 메모리 압박 및 기타 리소스 제약을 확인하세요.
요청이 용량을 기다리고 있다면 타임아웃을 늘리기 전에 해당 병목을 해결하세요. 용량 또는 프로세스 설정을 변경하면 서비스 안정성에 영향을 줄 수 있으므로, 적용 가능한 운영 권한 및 변경 절차에 따라 변경하세요.
5. 장시간 실행 작업을 백그라운드 작업으로 전환
가져오기, 내보내기, 보고서 생성, 이메일 처리 및 이와 유사한 작업에는 애플리케이션이 지원하는 경우 백그라운드 작업을 사용하세요. 초기 요청은 작업을 시작하거나 대기열에 넣고, 별도의 상태 화면 또는 알림이 진행 상황과 완료 여부를 알려야 합니다.
이렇게 하면 전체 작업 동안 브라우저 연결, 게이트웨이 워커 및 애플리케이션 요청을 계속 열어 둘 필요가 없습니다. 이 방식을 사용하기 전에 작업에 적절한 재시도 및 중복 제출 처리 기능이 있는지 확인하세요.
6. Nginx 타임아웃 설정을 신중하게 검토
Nginx가 게이트웨이라면 관련 server 또는 location 블록에서 적용되는 proxy_read_timeout 및 proxy_connect_timeout 설정을 검토하세요. 변경하기 전에 어느 계층이 타임아웃을 적용하는지 확인합니다.
작업에 더 오랜 시간이 걸릴 것으로 예상되고 백엔드가 정상이며 추가적인 연결 및 워커 사용량을 감당할 수 있을 때만 타임아웃을 늘리세요. 설정 변경에는 적절한 권한이 필요합니다. 변경 사항을 저장한 후 설정을 검증하고, 일반적인 배포 절차에 따라 Nginx를 reload한 다음 이전에 실패한 작업을 다시 실행하세요. 계획되지 않은 변경 중에는 서비스 reload와 읽기 전용 진단을 함께 수행하지 마세요.
7. Apache 프록시 설정 검토
mod_proxy를 사용하는 Apache에서는 적용되는 Timeout 및 ProxyTimeout 설정을 검토하세요. 대용량 업로드가 관련된 경우에는 관련 mod_reqtimeout 동작도 확인합니다.
가능한 경우 영향을 받는 경로 또는 작업에 대해 가장 범위가 좁고 안전한 변경을 적용하고, 권한과 롤백 계획을 마련하세요. 동일한 요청을 사용하여 다시 테스트하고, 더 긴 대기로 인해 워커나 연결이 고갈되지 않는지 확인합니다.
8. CDN 및 로드 밸런서 동작 확인
사이트에서 Cloudflare 또는 다른 CDN이나 로드 밸런서를 사용하는 경우 해당 서비스의 게이트웨이 타임아웃, 오리진 라우팅, 상태 및 요금제 수준 설정을 검토하세요. 사용 가능한 설정으로는 늘릴 수 없는 제한을 중간 계층에서 적용할 수 있습니다.
오리진이 해당 제한보다 더 긴 시간을 필요로 한다면 더 긴 브라우저 요청에 의존하지 말고 작업을 최적화하거나 비동기 처리로 전환하세요.
9. 느린 서드파티 호출 분리
각 외부 API 또는 webhook 호출을 별도로 측정하세요. 지원되는 경우 의존 서비스에 더 짧은 내부 타임아웃을 설정하고, 실패를 명시적으로 처리하며, 작업을 나중에 완료할 수 있다면 대기 중 또는 재시도 가능한 상태를 반환하세요.
불안정한 의존 서비스가 전체 게이트웨이 타임아웃을 소모하도록 두지 마세요. 자동 재시도 동작을 추가하기 전에 재시도 횟수가 제한되어 있고 안전한지 확인하세요.
10. 수정 사항 검증
이전에 실패한 정확한 페이지 작업 또는 요청을 다시 실행하세요. 활성 게이트웨이 타임아웃 안에 완료되는지 확인하고, 이후 로그를 검사하여 백엔드에 중단된 작업, 중복 작업 또는 비정상적으로 오래 실행되는 작업이 쌓이지 않는지 확인합니다. 백엔드에 직접 요청하는 것뿐 아니라 전체 프로덕션 경로를 통해 테스트하세요.
예방 및 해결 확인 방법
- 가져오기, 내보내기, 보고서 생성, 이메일 처리 및 일반적인 페이지 요청보다 오래 걸릴 수 있는 작업에는 백그라운드 작업을 사용하세요.
- 데이터가 증가함에 따라 자주 타임아웃되는 페이지와 관련된 데이터베이스 작업의 인덱스 및 쿼리 플랜을 검토하세요.
- 요청 시간, 대기열 시간, 데이터베이스 시간, 워커 사용량 및 의존 서비스 시간을 별도로 모니터링하세요.
- 가장 느리지만 정상적인 작업을 기준으로 프록시 및 애플리케이션 타임아웃을 신중하게 설정하되, 서드파티 의존 서비스 타임아웃은 제한된 범위로 유지하세요.
- 오리진에만 요청하지 말고 CDN 또는 로드 밸런서를 포함한 전체 프로덕션 경로를 통해 중요한 작업을 테스트하세요.
- 게이트웨이 타임아웃으로 인해 중복 작업이나 트랜잭션이 생성되지 않도록 재시도와 반복 제출을 안전하게 설계하세요.
- 변경 후 타임아웃이 발생했던 정확한 작업을 다시 실행하고, 불필요한 대기 작업이 쌓이지 않은 상태로 완료되는지 확인하세요.
외부 도움을 받아야 할 때
권한이 있는 직접 테스트에서는 백엔드가 빠르게 응답하지만 중간 계층을 거치면 504가 계속 발생하거나, 사용 중인 설정에서 중간 계층의 타임아웃을 변경할 수 없다면 CDN, 로드 밸런서, 호스팅 또는 네트워크 제공업체에 에스컬레이션하세요.
로그에 느린 쿼리, 잠금 대기, 고갈된 워커, 연결 풀 제한, 리소스 압박 또는 느린 의존 서비스가 나타난다면 애플리케이션 또는 데이터베이스 팀을 참여시키세요. 실패한 경로 또는 작업, 타임스탬프와 시간대, 요청 시간, 게이트웨이 및 애플리케이션 로그 항목, 관련 데이터베이스 처리 시간, 직접 백엔드 테스트의 성공 여부를 제공하세요. 에스컬레이션 시 자격 증명, 토큰 또는 민감한 요청 데이터를 공유하지 마세요.
자주 묻는 질문
504 Gateway Timeout은 브라우저 때문에 발생하나요?
일반적으로 그렇지 않습니다. 504는 업스트림 응답을 너무 오래 기다린 게이트웨이 또는 프록시가 반환합니다. 한 세션에만 문제가 발생한다면 재시도하거나 다른 연결을 테스트할 수 있지만, 브라우저 데이터를 삭제하는 것보다 게이트웨이 및 애플리케이션 처리 시간 로그가 더 유용합니다.
504가 표시되면 백엔드 서버가 다운된 상태인가요?
반드시 그렇지는 않습니다. 백엔드가 실행 중이지만 너무 느리거나, 과부하 상태이거나, 데이터베이스 쿼리에서 차단되었거나, 다른 서비스를 기다리고 있을 수 있습니다. 권한이 있는 직접 테스트와 애플리케이션 로그를 통해 느린 백엔드 문제인지 게이트웨이 또는 네트워크 문제인지 구분할 수 있습니다.
Nginx 또는 Apache 타임아웃을 늘려야 하나요?
작업에 실제로 더 오랜 시간이 필요하고 백엔드가 정상적으로 작동할 때만 늘리세요. 먼저 느린 쿼리, 대기열, 워커 제한 및 서드파티 호출을 조사해야 합니다. 타임아웃을 늘리면 동일한 실패를 단순히 늦출 뿐, 워커와 연결을 더 오랫동안 점유할 수 있습니다.
일반적인 페이지는 작동하는데 보고서나 내보내기만 타임아웃되는 이유는 무엇인가요?
보고서와 내보내기는 더 많은 데이터베이스 행을 처리하거나 파일을 생성하거나 추가 서비스를 기다리는 경우가 많습니다. 무거운 요청 하나가 게이트웨이 제한을 초과하는 동안 일반 페이지는 계속 빠르게 작동할 수 있습니다. 페이지 요청을 계속 열어 두기보다 작업을 최적화하거나 백그라운드 작업으로 실행하세요.
오리진에 직접 요청하면 작동하는데 CDN 때문에 504가 발생할 수 있나요?
예. CDN 또는 로드 밸런서는 자체 게이트웨이 타임아웃을 적용하거나 라우팅 문제를 일으킬 수 있습니다. 오리진은 빠르게 완료되지만 프록시를 거친 요청이 실패한다면 중간 계층의 타임아웃과 오리진 경로 동작을 검토하세요. 일부 제한은 계정 또는 요금제에서 설정할 수 없을 수 있습니다.
서드파티 API가 504를 발생시키는 경우 무엇을 확인해야 하나요?
해당 의존 서비스를 별도로 측정하고, 제한된 내부 타임아웃을 설정하며, 전체 요청을 계속 열어 두지 않고 실패를 처리하세요. 나중에 완료할 수 있는 작업이라면 대기 중 상태를 반환하고 비동기 방식으로 처리합니다. 재시도로 동일한 트랜잭션이 두 번 이상 제출되지 않는지 확인하세요.
추가 문서
권위 있는 설정 세부 정보는 사용 중인 게이트웨이 또는 리버스 프록시, 웹 서버, CDN 또는 로드 밸런서, 그리고 애플리케이션의 데이터베이스 및 작업 처리 구성 요소에 대한 문서를 참조하세요. 업스트림 응답 타임아웃, 연결 타임아웃, 프록시 동작, 요청 대기열, 의존 서비스 타임아웃 및 비동기 작업 지침을 특히 주의 깊게 확인하세요.