- jumpcomedy.com에서 밤 10시쯤 RTK Query의 HTTP POST 호출이 모두 실패하며 사이트 기능이 깨졌고, 로컬에서는 정상이라 원인 추적이 어려웠음
- 고객 불만이 쌓이는 동안 운영자는 프로덕션 지원, SRE, 시니어 엔지니어, 매니저 없이 혼자 장애를 감당해야 했음
- 브라우저의
fetch관련 TypeError는 GET·DELETE가 정상인 상황과 맞물려 직접적인 단서가 되지 못함 - Sentry, 프로덕션 DB, Cloudflare, Chrome 업데이트, 과거 버전 롤백을 확인해도 변화가 없었고, 로컬에 비워둔 PostHog api_key를 넣자 문제가 재현됨
- PostHog 제거 후 기능이 정상화됐으며, 이후 PostHog와 Redux Toolkit GitHub 이슈에서 같은 장애가 확인돼 외부 도구 영향으로 드러남
장애가 만든 압박
- jumpcomedy.com은 밤 10시쯤부터 RTK Query 기반 HTTP POST 호출이 모두 실패하며 주요 기능이 제대로 동작하지 않았음
- 최근 배포한 변경은 있었지만 원인으로 볼 만한 내용은 아니었고, 로컬 환경에서는 문제가 재현되지 않아 추적이 더 어려워짐
- NextJS와 Vercel Discord에 도움을 요청했지만 응답을 받지 못했고, 장애 대응을 넘길 프로덕션 지원 조직도 없었음
- 고객 이메일은 계속 쌓였음
- 이벤트 가격을 변경할 수 없다는 문의
- 프로모션 코드를 제거할 수 없다는 문의
- 소규모 비즈니스 고객들이 서비스에 의존하고 있다는 점 때문에 운영자는 수치심, 슬픔, 무능감, 임포스터 증후군을 느꼈음
디버깅 과정과 원인 확인
- 브라우저 오류는
fetch가 이미 사용된 request object와 함께 실행됐다는 TypeError였지만, 실제 원인을 가리키지는 못함 - 여러
console.log()와 브레이크포인트를 추가해 헤더, API 토큰 길이, 호출 순서 등을 확인했지만 명확한 원인으로 이어지지 않았음 - Chrome 업데이트 가능성을 의심했으나 Firefox와 Edge에서도 재현돼 브라우저 단독 문제는 아니었음
- 과거 버전으로 되돌려도 실패가 계속됨
- 한 달 전 버전에서도 실패
- 세 달 전 버전에서도 실패
- 1년 전 버전에서도 실패
- 로컬과 프로덕션의 차이를 줄이기 위해 여러 후보를 확인했음
- 프로덕션에서 Sentry 제거: 변화 없음
- 로컬을 프로덕션 DB에 연결: 변화 없음
- Cloudflare 비활성화: 변화 없음
- 로컬에서는 비용 절감을 위해 PostHog api_key를 비워두고 있었고, 이를 추가하자 같은 문제가 재현됨
- 다음 커밋에서 PostHog를 제거하자 모든 기능이 정상 동작함
- 같은 문제는 이후 GitHub 이슈로도 확인됨