프로덕션 장애 대응 표준 절차. On-call 담당자가 첫 번째로 참고하는 문서.
| 지표 | 목표 | 측정 방법 |
|---|---|---|
| 가용성 | 99% (월 다운타임 ≤ 7.3 h) | Vercel Analytics / UptimeRobot |
| TTI (Time to Interactive) | < 3s (p75, 4G) | Web Vitals (LCP 기준) |
| API 오류율 | < 1% | Sentry BAD_GATEWAY / GATEWAY_TIMEOUT 이벤트 |
| 배포 성공률 | 100% (실패 시 자동 롤백) | Vercel Deployment 상태 |
증상: Sentry CSRF_TOKEN_INVALID / CSRF_ORIGIN_MISMATCH 에러 급증, 사용자 로그인 불가.
원인 후보:
- CSP 헤더 오설정으로 쿠키 차단
- 배포 후 환경변수
NEXT_PUBLIC_SITE_URL불일치 (Origin 검증 실패) - 백엔드 세션/JWT 만료 정책 변경
대응 절차:
- Sentry → Issues →
CSRF_*이벤트 확인, 에러 코드·User-Agent 필터링 - Vercel → Environment Variables →
NEXT_PUBLIC_SITE_URL값이 실제 도메인과 일치하는지 확인 src/app/api/[...path]/route.ts의ALLOWED_ORIGINS로그 확인- 문제 확인 시 → 환경변수 수정 후 Redeploy (코드 변경 없이 재배포 가능)
- 즉각 해결 불가 시 → Vercel Rollback (이전 배포 "Promote to Production")
증상: Sentry BAD_GATEWAY (502) 또는 GATEWAY_TIMEOUT (504) 이벤트 급증.
원인 후보:
- 백엔드 서버 다운
- 네트워크 구간 장애 (Vercel Edge ↔ 백엔드)
API_ORIGIN환경변수 오기재
대응 절차:
curl -I https://api.jagalchi.dev/health로 백엔드 헬스 체크- 백엔드 팀에 슬랙 알림 (
#incident채널) - 클라이언트 단에서 할 수 있는 것 없음 → 백엔드 복구 대기
- 사용자 노출 최소화 필요 시 → 유지보수 페이지 임시 배포 (
NEXT_PUBLIC_MAINTENANCE=true)
증상: 신규 배포 후 에러율 급등 / 주요 기능 깨짐.
대응 절차:
- Vercel Dashboard → 프로젝트 → Deployments 탭
- 이전 정상 배포 행 선택 → 우상단
···→ "Promote to Production" - 1–2분 내 반영 완료 (DNS 전파 대기 불필요)
- 롤백 완료 후 Sentry 에러율 정상화 확인
- 근본 원인 수정 후 재배포
프론트엔드 직접 영향 범위: API 응답 타입 불일치.
증상: src/api/*.ts 타입과 실제 응답 불일치로 런타임 에러.
대응 절차:
- 백엔드 팀에서 변경 예정 스키마 공유 →
docs/api.md업데이트 - 프론트엔드 타입 (
src/types/,src/api/) 선수 업데이트 - 스테이징 환경에서 E2E 검증 후 프로덕션 배포
- 백엔드/프론트 배포 순서: 백엔드 먼저 → 프론트엔드 배포 (하위 호환 유지)
discord-notify.yml 워크플로우가 배포 이벤트를 Discord #deployments 채널에 전송.
Sentry 이벤트 알림은 Sentry 프로젝트 Settings → Alerts 에서 설정:
| Alert | 조건 | 채널 |
|---|---|---|
| 에러율 급등 | 1분 내 에러 10건 이상 | Discord #incident |
| 신규 이슈 | 처음 발생하는 에러 | Discord #sentry |
| P0 크래시 | level: fatal |
담당자 DM |
장애 종료 후 24시간 이내 작성. docs/audits/postmortem-YYYYMMDD.md 로 저장.
# Post-mortem — YYYY-MM-DD
## 요약
한 줄 요약.
## 타임라인
- HH:MM — 최초 감지
- HH:MM — 원인 특정
- HH:MM — 완화 조치
- HH:MM — 완전 복구
## 근본 원인
## 영향 범위
- 영향 유저 수 / 기간
- 영향 기능
## 대응 과정
## 재발 방지
- [ ] Action Item 1 (담당자, 기한)
- [ ] Action Item 2| 순번 | 담당자 | GitHub | 연락처 |
|---|---|---|---|
| 1 | justn-hyeok | @justn-hyeok | — |
팀 확장 시 이 표를 업데이트.