장애를 분류하고 업데이트를 조율하며 대응을 후속 작업으로 전환합니다. — Claude Skill
Claude Code용 Claude 스킬 · 제공: NickCrew · 실행: /incident-response (Claude 내)·업데이트: 2026년 6월 14일·vmain@1d565c1
심각도, 담당자, 상태 공유 주기, 차단 조치, 고객용 업데이트, 이해관계자 업데이트, 비난 없는 사후 분석 실행 항목으로 팀이 장애나 서비스 저하를 처리하게 돕습니다.
- 팀이 P0, P1, P2, P3 중 무엇인지 알 수 있도록 심각도를 분류합니다.
- 장애 담당자, 업데이트 주기, 단일 사실 출처 채널을 정의합니다.
- 복잡한 Slack, 티켓, 경보, 고객 메모를 고객에게 보낼 수 있는 상태 업데이트로 바꿉니다.
- 즉시 차단, 고객 커뮤니케이션, 내부 조율, 장애 후 후속 조치를 분리합니다.
- 장애 해결 후 담당자, 기한, 예방 점검이 포함된 사후 분석 실행 항목을 만듭니다.
지원팀, 개발팀, 리더십이 흩어진 채널에서 장애를 논의하는 동안 고객은 늦거나 일관성 없는 업데이트를 받습니다.
/incident-response를 실행해 심각도를 분류하고 담당자를 지정하며 업데이트 주기를 정하고 상태 업데이트를 작성한 뒤 사후 분석 흔적을 남깁니다.
대상
기능
흩어진 장애 사실을 고객, 지원팀, 리더십에게 보낼 명확한 상태 업데이트로 바꿉니다.
장애가 얼마나 심각한지, 누가 조율을 맡는지, 다음 업데이트가 언제인지 결정합니다.
대응 타임라인을 근본 원인, 기여 요인, 구체적 실행 항목으로 전환합니다.
작동 방식
증상, 사용자 영향, 영향받은 서비스, 타임라인, 현재 담당자, 고객 보고를 모읍니다.
심각도를 분류하고 커뮤니케이션 주기를 선택합니다.
즉시 차단 조치와 더 깊은 근본 원인 작업을 분리합니다.
알려진 것, 알려지지 않은 것, 다음 업데이트 시간을 포함한 고객·지원·리더십 업데이트를 작성합니다.
사실이 바뀌는 동안 장애 타임라인과 실행 추적기를 기록합니다.
해결 후 구체적인 후속 조치가 포함된 비난 없는 사후 분석 개요를 만듭니다.
입력 옵션
사용자가 겪는 문제, 영향받은 사용자 수, 데이터·매출·보안 관련 여부.
예시
09:04 지원팀이 고객 18곳의 결제 실패를 보고. 09:07 결제 대시보드에서 카드 승인 오류 32% 증가 확인. 09:10 개발팀은 새 사기 방지 규칙 배포를 의심. 09:14 영업팀은 엔터프라이즈 평가 2건이 막혔다고 보고. 영향: 미국/EU Safari 사용자 결제 실패. 데이터 손실 없음. 우회: 일부 사용자는 Chrome 재시도로 성공. 현재 채널: #support-urgent, #payments-eng, Zendesk tickets, Jira bug PAY-1842. 필요: 심각도, 고객 업데이트, 담당자, 내부 업데이트, 다음 조치, 사후 분석 메모.
P1로 분류합니다. 매출에 중요한 경로가 의미 있는 사용자 세그먼트에서 저하되었지만 전체 중단, 보안 문제, 데이터 손실은 없습니다. 영향을 받는 고객 경험은 '전체 결제 중단'이 아니라 Safari 결제입니다.
장애 지휘자: Payments Engineering이 기술 리드를 지정할 때까지 Support Lead. 단일 사실 출처: #inc-checkout-errors. 연결 티켓: PAY-1842. 업데이트 주기: 완화 전까지 30분마다, 해결 전까지 60분마다. 다음 외부 업데이트: 09:45 UTC.
미국과 EU의 일부 Safari 사용자에게 영향을 주는 결제 오류 증가를 조사하고 있습니다. 원인을 분리하는 동안 일부 고객은 다른 브라우저에서 결제를 완료할 수 있습니다. 다음 업데이트는 09:45 UTC까지 공유하겠습니다.
영향: 보고된 고객 18곳과 차단된 엔터프라이즈 평가 2건. 의심 트리거: 사기 방지 규칙 배포. 현재 가설은 확정되지 않았습니다. Payments Engineering이 브라우저별 승인 실패를 확인하고 규칙이 관련되면 롤백을 준비 중입니다.
지금: 사기 방지 규칙 배포 일시 중지 또는 롤백. 담당: Payments Engineering. 지금: 모든 Zendesk 티켓을 PAY-1842에 연결. 담당: Support. 다음: 브라우저와 지역별 결제 성공률 모니터링. 담당: Analytics/Payments. 다음: 우회 방법과 다음 업데이트 시간이 포함된 저장 답변 준비. 담당: Support Lead.
질문: 브라우저별 결제 모니터링 없이 배포가 Safari 사용자에게 도달한 이유는 무엇인가? 팀이 상태 업데이트를 갖기 전에 영업팀이 평가 고객에게 먼저 들은 이유는 무엇인가? 후속 조치는 세그먼트별 결제 경보, 배포 체크리스트 업데이트, 지원팀용 장애 연결 지침을 포함해야 합니다.
고객용 업데이트를 보내기 전에 심각도, 법무/컴플라이언스 문구, 우회 방법 공개 가능 여부를 확인합니다.
개선되는 지표
지원 도구
장애 대응을(를) 사용해 보시겠어요?
시작 방법을 선택하세요.
이 스킬을 컴퓨터에 로컬로 설치하고 실행합니다.
컴퓨터에서 터미널을 열고 이 명령을 붙여넣으세요:
이 명령은 스킬과 모든 파일을 컴퓨터에 다운로드합니다:
모든 프로젝트에서 사용하려면 끝에 -g를 추가하세요.
Claude Code를 시작한 다음 명령을 입력하세요:
장애 대응
탐지부터 사후 분석까지 구조화된 장애 관리와, 연쇄 실패를 예방하고 차단하기 위한 회복성 패턴입니다.
사용 시점
- 운영 환경 장애 진행 중(중단, 성능 저하, 데이터 손실)
- 서킷 브레이커, 벌크헤드, 대체 경로 전략 설계
- 카오스 엔지니어링 실험 수행 또는 계획
- 사후 분석 문서 작성 또는 검토
- 온콜 절차와 에스컬레이션 경로 수립
다음 경우에는 피하세요.
- 문제가 운영 환경 영향이 없는 개발 중 버그인 경우
- 일반 시스템 아키텍처 설계(대신 system-design 사용)
빠른 참조
| 주제 | 참조 로드 |
|---|---|
| 분류 프레임워크 | skills/incident-response/references/triage-framework.md |
| 사후 분석 패턴 | skills/incident-response/references/postmortem-patterns.md |
장애 대응 작업 흐름
1단계: 탐지
- 경보가 울리거나 사용자 보고가 접수됨
- 문제가 실제인지 확인(오탐 아님)
- 영향받은 서비스와 사용자 영향 범위 식별
2단계: 분류
- 심각도 분류(P0-P3)
- 장애 지휘자 지정
- 커뮤니케이션 채널 개설(워룸, Slack 채널)
- 상태 페이지 업데이트 시작
3단계: 차단
- 출혈을 멈춤: 롤백, 기능 플래그, 트래픽 전환
- 연쇄 장애 예방: 서킷 브레이커, 부하 차단, 벌크헤드 격리
- 커뮤니케이션: P0/P1은 15분마다 이해관계자 업데이트
4단계: 해결
- 수정 구현(먼저 최소 실행 가능한 수정)
- 시간이 허락하면 스테이징에서 검증
- 모니터링과 롤백 계획을 준비한 상태로 배포
- 지표가 기준선으로 돌아오는지 확인해 복구 검증
5단계: 사후 분석
- 48시간 안에 타임라인 문서화
- 모든 참여자와 비난 없는 리뷰 진행
- 근본 원인과 기여 요인 식별
- 담당자와 기한이 있는 실행 항목 지정
- 배운 점을 바탕으로 실행 문서와 경보 업데이트
심각도 프레임워크
| 수준 | 영향 | 응답 시간 | 예시 |
|---|---|---|---|
| P0 | 전체 중단, 데이터 손실, 보안 침해 | 즉시(< 5분) | 서비스 중단, 데이터 손상, 자격 증명 유출 |
| P1 | 주요 기능 중단, 큰 사용자 영향 | < 30분 | 결제 처리 실패, 특정 지역 인증 중단 |
| P2 | 성능 저하, 일부 기능 손실 | < 4시간 | 지연 시간 증가, 비핵심 기능 사용 불가 |
| P3 | 작은 이슈, 우회 방법 있음 | 다음 영업일 | UI 오류, 느린 보고서 생성, 외관 문제 |
출력
- 장애 타임라인과 심각도 분류
- 수행한 차단 조치
- 실행 항목이 포함된 사후 분석 문서
- 업데이트된 실행 문서와 경보 규칙
흔한 실수
- 심각도 분류를 건너뛰고 모든 것을 P0로 다룸
- 롤백 계획 없이 변경함
- 이해관계자에게 상태를 알리는 것을 잊음
- 시스템 문제를 식별하지 않고 책임을 묻는 사후 분석 작성
- 사후 분석 실행 항목을 후속 조치하지 않음
참조 문서
사후 분석 패턴
비난 없는 사후 분석 구조, 근본 원인 분석 기법, 조치 항목 추적, 카오스 엔지니어링 패턴입니다. 장애 해결 후 또는 회복성 테스트 프로그램을 설계할 때 사용하세요.
비난 없는 사후 분석 구조
핵심 원칙
- 비난 금지: 개인이 아니라 시스템, 프로세스, 조건에 집중
- 좋은 의도 가정: 모든 참여자는 당시 사용 가능한 정보로 최선을 다하고 있었음
- 처벌이 아니라 학습: 목표는 책임 추궁이 아니라 재발 방지
- 넓게 공유: 사후 분석은 팀 망신이 아니라 조직 학습
사후 분석 문서 템플릿
# 장애 사후 분석: [제목]
**날짜:** [장애 날짜]
**심각도:** P[0-3]
**지속 시간:** [시작 시간]부터 [종료 시간]까지([총 지속 시간])
**장애 지휘자:** [이름]
**작성자:** [이름]
**상태:** [초안 | 검토 | 최종]
## 요약
[무슨 일이 일어났고 사용자 영향이 무엇이었는지 1-2문장으로 설명]
## 영향
- **영향받은 사용자:** [수 또는 비율]
- **지속 시간:** [사용자가 문제를 경험한 시간]
- **매출 영향:** [해당 시]
- **데이터 영향:** [데이터 손실 또는 손상 여부]
- **SLA 영향:** [SLA 위반 여부]
## 타임라인
모든 시간은 [시간대] 기준입니다.
| 시간 | 이벤트 |
|------|-------|
| HH:MM | [첫 신호 / 경보 발생] |
| HH:MM | [온콜 확인] |
| HH:MM | [심각도를 P_로 분류] |
| HH:MM | [핵심 조사 발견 사항] |
| HH:MM | [완화 조치 적용] |
| HH:MM | [문제 해결 확인] |
| HH:MM | [모니터링 안정 확인] |
## 근본 원인
[근본 원인의 상세 설명. 어떤 조건이나 변경이 실패로 이어졌는가?]
## 기여 요인
- [요인 1: 예, 이 실패 모드에 대한 모니터링 누락]
- [요인 2: 예, 트래픽이 높은 기간에 배포]
- [요인 3: 예, 자동 롤백 미설정]
## 잘된 점
- [항목 1: 예, 영향 발생 후 2분 안에 경보가 울림]
- [항목 2: 예, 팀이 상황실에서 효과적으로 조율함]
- [항목 3: 예, 롤백이 매끄럽고 빨랐음]
## 부족했던 점
- [항목 1: 예, 실패한 서비스를 식별하는 데 20분 걸림]
- [항목 2: 예, 이 실패 모드에 대한 런북이 없었음]
- [항목 3: 예, 상태 페이지가 30분 동안 업데이트되지 않음]
## 조치 항목
| ID | 조치 | 담당자 | 우선순위 | 기한 | 상태 |
|----|--------|-------|----------|----------|--------|
| 1 | [조치 설명] | [이름] | P1 | [날짜] | 열림 |
| 2 | [조치 설명] | [이름] | P2 | [날짜] | 열림 |
## 배운 점
[향후 설계, 프로세스, 도구 결정에 반영해야 할 핵심 교훈]
사후 분석 미팅 진행
미팅 전:
- 사후 분석 문서 초안을 작성해 24시간 전에 공유
- 모든 참여자가 정확성을 위해 타임라인을 검토
- 장애 지휘자가 근본 원인 분석을 준비
미팅 중(60-90분):
- 타임라인 리뷰(15분): 이벤트를 훑고, 오류를 고치고, 빈틈을 채움
- 근본 원인 논의(20분): 5 Whys 또는 피시본 분석 적용
- 기여 요인(15분): 무엇이 장애를 더 악화시키거나 해결을 어렵게 만들었는가?
- 잘된 점(10분): 효과적이었던 실천을 강화
- 조치 항목(20분): 구체적이고 배정 가능하며 기한이 있는 조치를 정의
미팅 후:
- 24시간 안에 문서 최종화
- 더 넓은 조직에 배포
- 조치 항목을 추적 시스템에 입력
- 조치 항목 완료 상태를 확인하기 위한 후속 리뷰 일정 잡기
근본 원인 분석 기법
5 Whys
증상을 지나 근본 원인까지 내려가기 위해 "왜"를 반복해서 묻습니다.
예시:
문제: 사용자에게 주문 확인 이메일이 중복 발송됨.
왜 1: 이메일 서비스가 확인 이메일을 두 번 보냄.
왜 2: 주문 완료 이벤트가 두 번 발행됨.
왜 3: 주문 서비스가 제한시간 초과 후 재시도함.
왜 4: 메시지 브로커가 부하 상태에서 느리게 확인 응답함.
왜 5: 브로커 디스크가 95% 가득 차서 쓰기 지연이 발생함.
근본 원인: 메시지 브로커의 디스크 사용량 모니터링이나 경보가 없었음.
조치: 디스크 사용량 80% 임곗값 경보 + 자동 확장 추가.
가이드라인:
- 고칠 수 있는 시스템적 원인(프로세스, 도구, 설계)에 도달하면 멈춤
- "휴먼 에러"에서 멈추지 말고, 시스템이 왜 그 오류를 허용했는지 질문
- 일부 장애에는 여러 근본 원인이 있으므로 각 분기마다 5 Whys를 수행
- 답은 추측이 아니라 사실이어야 함
피시본 다이어그램(이시카와)
기여 요인을 표준 차원별로 분류합니다.
┌─ 사람: 온콜이 서비스를 잘 모름
├─ 프로세스: 롤백 런북이 없었음
중복 이메일 ───────├─ 기술: 이메일 발송에 멱등성이 없음
├─ 환경: 브로커 디스크 95%
├─ 모니터링: 디스크 사용량 경보 없음
└─ 외부: 상위 트래픽 급증
표준 범주:
- 사람: 지식 공백, 인력 배치, 커뮤니케이션
- 프로세스: 누락된 런북, 불명확한 절차, 승인 병목
- 기술: 버그, 누락된 기능, 아키텍처 공백
- 환경: 인프라, 용량, 설정
- 모니터링: 누락된 경보, 잘못된 임곗값, 관찰 가능성 공백
- 외부: 서드파티 장애, 트래픽 급증, 공격
장애 트리 분석
실패에서 거꾸로 추적해 가능한 모든 원인을 식별합니다.
최상위 이벤트: 서비스 중단
├── AND: 로드 밸런서 실패
│ ├── OR: 설정 오류
│ └── OR: 상태 확인 설정 오류
└── AND: 장애 조치가 작동하지 않음
├── OR: 장애 조치가 설정되지 않음
└── OR: 장애 조치 상태 확인도 실패함
사용 시점: 여러 실패가 상호작용해 5 Whys만으로 부족한 복잡한 장애.
조치 항목 추적
조치 항목 품질 기준
모든 조치 항목은 다음을 만족해야 합니다.
- 구체적: 무엇을 할지 명확히 설명("모니터링 개선" 금지)
- 배정 가능: 팀이 아니라 한 명의 담당자
- 기한 있음: "언젠가"가 아니라 기한
- 검증 가능: 완료 정의가 명확함
- 우선순위 있음: P1(다음 온콜 교대 전), P2(이번 스프린트), P3(이번 분기)
조치 항목 범주
| 범주 | 설명 | 예시 |
|---|---|---|
| 탐지 | 문제를 알아차리는 능력 개선 | 경보 추가, 대시보드 개선 |
| 예방 | 문제가 발생하지 않도록 막기 | 버그 수정, 검증 추가, 아키텍처 개선 |
| 완화 | 발생했을 때 영향을 줄이기 | 서킷 브레이커 추가, 롤백 개선, 런북 작성 |
| 프로세스 | 팀 대응 개선 | 온콜 절차 업데이트, 교육 수행 |
추적 및 후속 조치
- 모든 조치 항목을 즉시 팀의 이슈 추적기에 입력
- 추적 가능성을 위해
postmortem과 장애 ID 태그 지정 - 팀 스탠드업에서 열린 사후 분석 조치 항목을 매주 리뷰
- 기한이 지난 P1 항목은 엔지니어링 매니저에게 에스컬레이션
- 조치 항목은 검증 완료된 경우에만 닫기("코드 병합"만으로 닫지 않음)
조치 항목 안티패턴
| 안티패턴 | 문제 | 더 나은 대안 |
|---|---|---|
| "더 조심하기" | 실행 가능하지 않음 | 검사를 자동화 |
| "모니터링 개선" | 너무 모호함 | "X 지표가 Y를 Z분 동안 초과하면 경보 추가" |
| "담당자 없음" | 완료되지 않음 | 특정 사람에게 배정 |
| "기한: 미정" | 우선순위에서 밀림 | 구체적인 날짜 설정 |
| "테스트 더 추가" | 범위가 없음 | "이 특정 실패 모드에 대한 회귀 테스트 추가" |
카오스 엔지니어링 패턴
장애 주입
회복성을 검증하기 위해 의도적으로 실패를 도입합니다.
흔한 장애 유형:
| 장애 | 도구/방법 | 검증 대상 |
|---|---|---|
| 서비스 인스턴스 종료 | 프로세스 종료, pod 삭제 | 자동 재시작, 상태 확인 |
| 네트워크 지연 | tc netem, Toxiproxy | 제한시간 처리, 서킷 브레이커 |
| 네트워크 분리 | iptables, DNS override | 장애 조치, 스플릿 브레인 처리 |
| 디스크 가득 참 | fallocate, dd | 우아한 성능 저하, 경보 |
| CPU 고갈 | stress-ng | 자동 확장, 부하 차단 |
| 의존성 실패 | 500을 반환하는 mock | 대체 경로, 오류 처리 |
| 시계 오차 | chrony offset | 시간 의존 로직 |
장애 주입 체크리스트
- 가설 정의: "[장애]가 발생하면 [X]가 일어날 것이라고 믿는다"
- 폭발 반경 제한(단일 인스턴스, 카나리, 스테이징)
- 롤백 장치 준비(실험용 kill switch)
- 효과를 관찰할 모니터링 준비
- 팀이 실험 실행 사실을 알고 있음
- 중단 기준 정의(실제 사용자 영향이 N%를 넘으면 중단)
게임 데이
팀이 모의 장애를 상대로 장애 대응을 연습하는 구조화된 훈련입니다.
게임 데이 계획 템플릿:
## 게임 데이: [제목]
**날짜:** [날짜와 시간]
**지속 시간:** [예상 지속 시간]
**진행자:** [이름]
**참여자:** [팀원]
### 시나리오
[모의 장애 설명]
### 목표
- [ ] 경보가 [N]분 안에 장애를 탐지하는지 검증
- [ ] 팀이 올바른 심각도로 분류할 수 있는지 검증
- [ ] 완화 조치를 [N]분 안에 적용할 수 있는지 검증
- [ ] 커뮤니케이션 프로토콜이 지켜지는지 검증
### 기본 규칙
- 이것은 평가가 아니라 연습입니다
- 진행자가 시나리오 진행을 통제합니다
- 실제 운영 환경 영향이 감지되면 누구나 "중지"를 외칠 수 있습니다
- 모든 관찰을 실시간으로 문서화합니다
### 디브리프 질문
1. 경보가 예상대로 울렸는가?
2. 올바른 팀이 충분히 빨리 참여했는가?
3. 런북은 충분했는가?
4. 실제 장애라면 무엇을 다르게 했을까?
게임 데이 주기:
- 중요 서비스는 분기마다
- 주요 아키텍처 변경 후
- 새 온콜 엔지니어 온보딩 시
- P0 장애 후(수정 사항 테스트)
회복성 테스트 방법론
회복성 성숙도 수준
| 수준 | 설명 | 활동 |
|---|---|---|
| 1 - 반응형 | 실패가 발생한 뒤 수정 | 사후 분석, 기본 모니터링 |
| 2 - 인지형 | 실패가 어디서 일어날 수 있는지 파악 | 실패 모드 분석, 위험 레지스트리 |
| 3 - 선제형 | 실패가 일어나기 전에 테스트 | 스테이징에서 카오스 실험 |
| 4 - 지속형 | 운영 환경에서 정기적으로 회복성 검증 | 자동화된 카오스, 게임 데이 |
| 5 - 안티프래질 | 시스템이 실패를 통해 개선됨 | 피드백 루프, 자동 복구 |
회복성 테스트 체크리스트
각 중요 서비스에 대해 다음을 검증하세요.
- 단일 인스턴스 실패: 인스턴스 하나가 죽어도 서비스가 복구됨
- 의존성 제한시간 초과: 서비스가 느린 의존성을 우아하게 처리함
- 의존성 중단: 의존성이 중단되어도 서비스가 충돌하지 않고 성능 저하됨
- 네트워크 분리: 서비스가 스플릿 브레인 시나리오를 처리함
- 부하 급증: 평소의 3배 트래픽에서 부하를 차단하거나 확장함
- 디스크 가득 참: 충돌 전에 경보를 울리고 성능 저하됨
- 설정 오류: 잘못된 설정에서 명확한 오류와 함께 빠르게 실패함
- 롤백: 5분 안에 이전 버전을 배포할 수 있음
- 데이터 손상: 지난 분기 안에 백업 복원이 테스트됨
정상 상태 가설
카오스 실험을 실행하기 전에 "정상"이 무엇인지 정의하세요.
정상 상태:
- 요청 성공률 > 99.9%
- p99 지연 시간 < 200ms
- 오류율 < 0.1%
- 울리는 경보 없음
실험: 서비스 인스턴스 3개 중 1개 종료
가설: 장애 주입 후 60초 안에 정상 상태 지표가
기준선의 10% 이내로 유지된다.
중단 조건: 오류율이 30초 넘게 5%를 초과한다.
name: incident-response description: 장애 분류, 연쇄 장애 예방, 사후 분석 방법론입니다. 운영 환경 장애를 처리하거나, 회복성 패턴을 설계하거나, 카오스 엔지니어링 실험을 수행할 때 사용합니다. keywords:
- incident response
- outage
- postmortem
- triage
- incident
- response
장애 대응
탐지부터 사후 분석까지 구조화된 장애 관리와, 연쇄 실패를 예방하고 차단하기 위한 회복성 패턴입니다.
사용 시점
- 운영 환경 장애 진행 중(중단, 성능 저하, 데이터 손실)
- 서킷 브레이커, 벌크헤드, 대체 경로 전략 설계
- 카오스 엔지니어링 실험 수행 또는 계획
- 사후 분석 문서 작성 또는 검토
- 온콜 절차와 에스컬레이션 경로 수립
다음 경우에는 피하세요.
- 문제가 운영 환경 영향이 없는 개발 중 버그인 경우
- 일반 시스템 아키텍처 설계(대신 system-design 사용)
빠른 참조
| 주제 | 참조 로드 |
|---|---|
| 분류 프레임워크 | skills/incident-response/references/triage-framework.md |
| 사후 분석 패턴 | skills/incident-response/references/postmortem-patterns.md |
장애 대응 작업 흐름
1단계: 탐지
- 경보가 울리거나 사용자 보고가 접수됨
- 문제가 실제인지 확인(오탐 아님)
- 영향받은 서비스와 사용자 영향 범위 식별
2단계: 분류
- 심각도 분류(P0-P3)
- 장애 지휘자 지정
- 커뮤니케이션 채널 개설(상황실, Slack 채널)
- 상태 페이지 업데이트 시작
3단계: 차단
- 출혈을 멈춤: 롤백, 기능 플래그, 트래픽 전환
- 연쇄 장애 예방: 서킷 브레이커, 부하 차단, 벌크헤드 격리
- 커뮤니케이션: P0/P1은 15분마다 이해관계자 업데이트
4단계: 해결
- 수정 구현(먼저 최소 실행 가능한 수정)
- 시간이 허락하면 스테이징에서 검증
- 모니터링과 롤백 계획을 준비한 상태로 배포
- 지표가 기준선으로 돌아오는지 확인해 복구 검증
5단계: 사후 분석
- 48시간 안에 타임라인 문서화
- 모든 참여자와 비난 없는 리뷰 진행
- 근본 원인과 기여 요인 식별
- 담당자와 기한이 있는 조치 항목 지정
- 배운 점을 바탕으로 런북과 경보 업데이트
심각도 프레임워크
| 수준 | 영향 | 응답 시간 | 예시 |
|---|---|---|---|
| P0 | 전체 중단, 데이터 손실, 보안 침해 | 즉시(< 5분) | 서비스 중단, 데이터 손상, 자격 증명 유출 |
| P1 | 주요 기능 중단, 큰 사용자 영향 | < 30분 | 결제 처리 실패, 특정 지역 인증 중단 |
| P2 | 성능 저하, 일부 기능 손실 | < 4시간 | 지연 시간 증가, 비핵심 기능 사용 불가 |
| P3 | 작은 이슈, 우회 방법 있음 | 다음 영업일 | UI 오류, 느린 보고서 생성, 외관 문제 |
출력
- 장애 타임라인과 심각도 분류
- 수행한 차단 조치
- 조치 항목이 포함된 사후 분석 문서
- 업데이트된 런북과 경보 규칙
흔한 실수
- 심각도 분류를 건너뛰고 모든 것을 P0로 다룸
- 롤백 계획 없이 변경함
- 이해관계자에게 상태를 알리는 것을 잊음
- 시스템 문제를 식별하지 않고 책임을 묻는 사후 분석 작성
- 사후 분석 조치 항목을 후속 조치하지 않음
분류 프레임워크
Production 장애를 위한 심각도 분류, 연쇄 장애 예방, 커뮤니케이션 프로토콜, 에스컬레이션 경로입니다. 진행 중인 장애 대응이나 장애 대응 절차를 수립할 때 사용하세요.
심각도 분류(P0-P3)
P0 -- 치명적
정의: 전체 사용자에게 영향을 주는 완전한 서비스 중단, 진행 중인 데이터 손실, 보안 침해입니다.
| 속성 | 요구사항 |
|---|---|
| 응답 시간 | < 5분 |
| 장애 지휘자 | 필수(시니어 엔지니어 또는 SRE) |
| 커뮤니케이션 주기 | 이해관계자에게 15분마다 |
| 상황실 | 즉시 개설 |
| 에스컬레이션 | 15분 안에 부사장/이사에게 알림 |
| 사후 분석 | 48시간 안에 필수 |
예시:
- Production 데이터베이스에 접근할 수 없음
- 인증 서비스가 완전히 중단됨
- 진행 중인 데이터 손상 또는 손실
- 유출이 확인된 보안 침해
- 결제 처리가 중단됨
P1 -- 높음
정의: 주요 기능이 중단되었거나 큰 사용자 집합에 중대한 성능 저하가 발생했습니다.
| 속성 | 요구사항 |
|---|---|
| 응답 시간 | < 30분 |
| 장애 지휘자 | 필수 |
| 커뮤니케이션 주기 | 이해관계자에게 30분마다 |
| 상황실 | 30분 안에 해결되지 않으면 개설 |
| 에스컬레이션 | 30분 안에 매니저에게 알림 |
| 사후 분석 | 1주 안에 필수 |
예시:
- 한 지역에서 결제 처리가 실패함
- 검색 기능이 쿼리의 20% 이상에서 오류를 반환함
- API 지연 시간이 평소보다 10배 높음
- 특정 OS 버전에서 모바일 앱이 실행 즉시 충돌함
P2 -- 중간
정의: 우회 방법이 있는 성능 저하 또는 부분 기능 손실입니다.
| 속성 | 요구사항 |
|---|---|
| 응답 시간 | < 4시간 |
| 장애 지휘자 | 선택 사항(온콜 엔지니어가 처리) |
| 커뮤니케이션 주기 | 시작 시와 해결 시 상태 업데이트 |
| 상황실 | 필요 없음 |
| 에스컬레이션 | 8시간 뒤에도 해결되지 않으면 |
| 사후 분석 | 권장 |
예시:
- 비핵심 엔드포인트의 지연 시간이 상승함(평소의 2-3배)
- 백그라운드 작업 처리가 지연됨
- 비핵심 서드파티 연동이 중단됨
- 보고서 생성이 느리지만 작동은 함
P3 -- 낮음
정의: 사용자 영향이 최소인 작은 이슈입니다. 우회 방법이 있거나 외관 문제입니다.
| 속성 | 요구사항 |
|---|---|
| 응답 시간 | 다음 영업일 |
| 장애 지휘자 | 필요 없음 |
| 커뮤니케이션 주기 | 해결 시 티켓 업데이트 |
| 상황실 | 필요 없음 |
| 에스컬레이션 | 필요 없음 |
| 사후 분석 | 필요 없음 |
예시:
- 예외 사례에서 UI 렌더링 오류
- 비핵심 cron 작업 실패(재시도 예정)
- 내부 도구 대시보드 로드 지연
- 기능에 영향을 주지 않는 작은 로깅 오류
심각도 결정 트리
데이터가 손실되거나 손상되고 있는가?
├─ 예 → P0
└─ 아니오
보안 침해가 있는가?
├─ 예 → P0
└─ 아니오
기본 서비스가 완전히 중단되었는가?
├─ 예 → P0
└─ 아니오
많은 사용자에게 주요 기능이 중단되었는가?
├─ 예 → P1
└─ 아니오
성능이 크게 저하되었는가?
├─ 예 → P2
└─ 아니오 → P3
연쇄 장애 예방
서킷 브레이커
실패 중인 의존성을 자동으로 더 이상 호출하지 않아 연쇄 장애를 예방합니다.
구현 체크리스트:
- 모든 외부 의존성에 서킷 브레이커가 있음
- 실패 임곗값이 의존성별로 조정되어 있음(모든 곳에 같은 값 사용 금지)
- OPEN 상태가 의미 있는 대체 경로를 반환함(캐시 데이터, 성능 저하 응답, 오류)
- HALF-OPEN 탐침이 가벼움(전체 요청이 아니라 상태 확인)
- 서킷 브레이커 상태를 관찰할 수 있음(지표, 대시보드)
- 서킷 브레이커가 열리면 경보가 울림
설정 템플릿:
의존성: [서비스 이름]
실패 임곗값: [T]초 동안 [N]회 실패
재설정 제한시간: [T]초
대체 경로: [캐시 응답 | 오류 메시지 | 성능 저하 모드]
벌크헤드 격리
한 영역의 장애가 다른 영역의 리소스까지 고갈시키지 않도록 리소스를 분리합니다.
패턴:
- 스레드 풀 격리: 의존성별 별도 스레드 풀
- 커넥션 풀 격리: 하위 서비스별 전용 커넥션 풀
- 프로세스 격리: 중요 워크로드와 비핵심 워크로드를 별도 프로세스로 분리
- 인프라 격리: 중요 워크로드와 배치 워크로드를 별도 클러스터로 분리
체크리스트:
- 중요 경로 의존성에 전용 리소스 풀이 있음
- 비핵심 백그라운드 작업이 중요 요청 처리를 굶기지 않음
- 풀별 리소스 한도가 설정되어 있음(최대 커넥션, 최대 스레드)
- 풀 고갈은 조용한 대기가 아니라 경보를 발생시킴
부하 차단
고우선순위 트래픽의 용량을 보존하기 위해 낮은 우선순위 작업을 의도적으로 버립니다.
우선순위 등급:
| 우선순위 | 트래픽 유형 | 차단 시점 |
|---|---|---|
| 치명적 | 상태 확인, 인증 | 절대 차단하지 않음 |
| 높음 | 핵심 사용자 요청 | 용량 > 95% |
| 중간 | 보조 기능, 분석 | 용량 > 80% |
| 낮음 | 백그라운드 작업, 사전 가져오기 | 용량 > 70% |
구현:
- 요청 우선순위 헤더 또는 경로 기반 분류 사용
- 차단한 요청에는 Retry-After 헤더와 함께 503 반환
- 차단율을 지표로 모니터링(차단율 > 0이면 경보)
우아한 성능 저하 전략
| 전략 | 설명 | 예시 |
|---|---|---|
| 기능 플래그 | 비핵심 기능 비활성화 | 부하가 높을 때 추천 기능 끄기 |
| 캐시 대체 경로 | 오래된 데이터 제공 | 검색 서비스가 중단되면 캐시된 검색 결과 표시 |
| 읽기 전용 모드 | 쓰기 비활성화 | 결제 장애 중 구매는 막고 탐색은 허용 |
| 정적 대체 경로 | 미리 생성된 콘텐츠 제공 | CMS가 중단되면 정적 랜딩 페이지 표시 |
| 큐잉 및 재시도 | 요청은 받되 처리는 지연 | 주문을 접수하고 백엔드 복구 후 처리 |
커뮤니케이션 프로토콜
상태 페이지 업데이트
상태 페이지 항목 템플릿:
[타임스탬프] - [상태: 조사 중 | 원인 확인 | 모니터링 중 | 해결됨]
영향: [사용자가 볼 수 있는 영향의 짧은 설명]
현재 상태: [우리가 아는 내용과 현재 수행 중인 일]
다음 업데이트: [다음 업데이트 예상 시점]
업데이트 주기:
- P0: 해결될 때까지 15분마다
- P1: 해결될 때까지 30분마다
- P2: 시작 시와 해결 시
- P3: 해결 시에만
이해관계자 알림 템플릿
제목: [P0/P1] [서비스] - [짧은 영향 설명]
심각도: P[0-3]
시작 시간: [ISO 8601 타임스탬프]
영향: [누가 어떤 영향을 받는지]
현재 상태: [우리가 아는 내용]
수행한 조치: [지금까지 수행한 내용]
예상 복구 시간: [알고 있으면 기재, 아니면 "조사 중"]
다음 업데이트: [시점]
장애 지휘자: [이름]
상황실: [링크/채널]
내부 커뮤니케이션 규칙
- 단일 진실 공급원: 모든 업데이트는 개인 메시지가 아니라 장애 채널을 통해 전달
- 추측이 아니라 사실: 아는 내용을 공유하고, 추정은 추정이라고 표시
- 모든 것에 타임스탬프: 모든 조치와 관찰에 타임스탬프 기록
- 비난 금지: 누가 일으켰는지가 아니라 무엇이 일어났는지에 집중
- 명확한 인수인계: 교대 시 맥락을 명시적으로 인수인계
에스컬레이션 경로
에스컬레이션 트리거
| 조건 | 조치 |
|---|---|
| P0가 5분 안에 확인되지 않음 | 보조 온콜 호출 |
| P0/P1이 30분 안에 완화되지 않음 | 엔지니어링 매니저에게 에스컬레이션 |
| P0가 1시간 안에 해결되지 않음 | 부사장/이사에게 에스컬레이션 |
| 매출에 영향을 주는 모든 심각도 | 재무팀과 비즈니스 이해관계자에게 알림 |
| 보안 장애 확인 | 보안팀과 법무팀에 알림 |
| 데이터 침해 의심 | 데이터 침해 대응 계획 실행 |
에스컬레이션 체크리스트
- 1차 온콜이 호출되고 확인함
- 5분 안에 확인이 없으면 2차 온콜 호출
- 장애 지휘자 지정
- 관련 팀 리드에게 알림
- 상태 페이지 업데이트
- 고객 지원팀에 대화 가이드 제공
- 경영진 이해관계자에게 알림(P0/P1만)
온콜 책임
장애 중:
- 5분 안에 호출 확인
- 심각도를 평가하고 장애 채널 개설
- 조사를 시작하고 발견 사항을 실시간 문서화
- 필요 시 다른 팀과 조율
- 요구된 주기에 맞춰 상태 업데이트 제공
장애 후:
- 모니터링으로 해결이 확인되었는지 보장
- 장애 타임라인 초안 작성
- 필요 시 사후 분석 일정 잡기
- 새로 배운 내용을 런북에 업데이트
- 교대가 장애 중 끝나면 다음 온콜에게 인수인계