포스트모템: Vercel Edge Function 타임아웃으로 인해 우리의 글로벌 API가 30분 동안 실패
Source: Dev.to
사고 개요
2024년 10월 17일 14:22 UTC에 전 세계 API가 30 분 동안 완전 중단되었습니다. 중단은 Vercel Edge Function의 잘못 구성된 타임아웃 설정 때문에 발생했습니다.
타임라인
| Time (UTC) | Event |
|---|---|
| 14:22 | 모니터링 알림이 전 세계 API 엔드포인트에서 100 % 오류율을 감지하고 트리거되었습니다. 모든 사용자 요청이 504 Gateway Timeout 오류를 반환했습니다. |
| 14:24 | 당직 엔지니어링 팀이 알림을 확인하고 조사에 착수했습니다. Edge Function 로그에 핵심 API 핸들러에 대한 타임아웃 오류가 표시되었습니다. |
| 14:27 | 팀은 최근 배포에서 Edge Function의 maxDuration을 10 seconds에서 1 second로 줄였으며, 이는 하위 데이터베이스 쿼리의 평균 2.8 seconds 응답 시간보다 낮았음을 확인했습니다. |
| 14:29 | Edge Function 설정을 이전 10‑second 타임아웃 값으로 롤백했습니다. |
| 14:30 | API 헬스 체크가 100 % 성공으로 회복되었으며, 사용자 접근이 완전히 복구되었습니다. |
| 14:45 | 사고 후 검토 킥오프 회의를 열어 결과를 문서화했습니다. |
근본 원인
일상적인 성능 최적화 배포 중 인간 실수로 핵심 Vercel Edge Function의 maxDuration 설정이 10 seconds에서 1 second로 변경되었습니다. 팀은 하위 PostgreSQL 쿼리와 서드파티 인증 서비스 호출의 평균 2.8‑second 응답 시간을 고려하지 않았습니다. 타임아웃에 도달하면 Vercel Edge Functions은 실행을 중단하고 모든 호출자에게 504 오류를 반환했습니다.
영향
- 전 세계 API 요청의 **100 %**가 30 분 동안 504 오류로 실패했습니다 (14:22 – 14:52 UTC).
- 모든 사용자 대상 제품(웹 앱, 모바일 앱, 서드파티 통합)이 접근 불가능했습니다.
- 약 12,000개의 사용자 요청이 실패했습니다.
- 데이터 손실은 발생하지 않았습니다.
해결
사고는 14:29 UTC에 Edge Function 설정을 원래 10‑second 타임아웃으로 롤백함으로써 해결되었습니다. 짧은 헬스 체크 검증 후 14:30 UTC에 전체 서비스 복구가 확인되었습니다. 코드 변경은 필요하지 않았으며, 문제는 순전히 설정에 의한 것이었습니다.
예방 조치
- 배포 전 검사: 새로운 타임아웃 값은 이제 과거 7 일간 실행 시간의 95번째 백분위수와 비교됩니다. 타임아웃이 이 임계값 이하로 설정되면 배포가 차단됩니다.
- 단계적 롤아웃: 모든 Edge Function 설정 변경은 트래픽의 1 %에 먼저 배포되고, 이후 10 %, 마지막으로 100 %에 배포됩니다. 오류율이 1 %를 초과하면 자동 롤백됩니다.
- 강화된 알림: 타임아웃 비율이 5 %를 초과하면 새로운 Vercel Edge Function 알림이 트리거되어 당직 팀에 즉시 Slack 알림을 보냅니다.
- 업데이트된 교육: 배포 교육에 모든 타임아웃 및 실행 제한 변경에 대한 필수 검토 단계가 포함되었습니다.
- 런북 추가: Edge Function 타임아웃 사고에 대한 런북이 추가되어 단계별 롤백 절차를 상세히 설명합니다.