Rain Lag

종이 한 장으로 끝내는 인시던트 레일 스케치: 장애 의사결정을 위한 단일 선로 설계

“종이 기반 인시던트 레일 스케치”라는 단순하지만 강력한 모델로 장애 대응 의사결정을 하나의 선형 트랙에 정리해, 혼선을 줄이고 일관성을 높이며, 비난 없이 학습 가능한 포스트모템을 만드는 방법을 소개합니다.

소개

대부분의 인시던트(장애) 대응 프로세스는 쉽게 산만하게 흩어집니다.

채팅 스레드, 워룸 콜, 여기저기 흩어진 메모, 반쯤만 작성된 런북, 제각각인 티켓들이 동시에 쏟아집니다. 장애가 일단락되고 나면 팀은 아주 기본적인 질문부터 다시 묻게 됩니다. “언제 무슨 일이 있었지? 누가 어떤 결정을 했지? 왜 행동을 했지?”

**“종이 기반 인시던트 레일 스케치(paper-only incident rail sketch)”**는 이 혼란을 의도적으로 단순화하는 개념적 모델입니다. 전체 장애 대응 과정을 단일 선로(single-lane) 철도 트랙처럼 상상합니다. 그리고 의미 있는 모든 의사결정을 시간 순서대로 한 칸 한 칸, 마치 서로 연결된 객차처럼 그 위에 올려둡니다.

겉보기엔 단순하지만 이 모델은 다음을 가능하게 합니다.

  • 중요한 의사결정을 눈에 보이고 감사 가능한 형태로 만든다
  • 심각한 장애에서 누가 무엇을 책임지는지 명확하게 한다
  • 로그 기반 리뷰 및 이상 탐지(AAR-log 같은 프레임워크에서 영감)를 지원한다
  • 잘 정리된 의사결정 타임라인을 바탕으로 비난 없는(blameless) 포스트모템을 할 수 있게 한다

이 글에서는 초기 대응부터 사후 학습까지, 이 단일 선로 모델의 전 과정을 살펴보고 실제 팀에 어떻게 적용할 수 있는지 설명합니다.


종이 기반 인시던트 레일 스케치란?

**레일 스케치(rail sketch)**를 종이에 그린 한 줄이라고 생각해 보세요. 왼쪽 끝은 “인시던트 감지(Incident detected)”, 오른쪽 끝은 “인시던트 종료(Incident closed)”입니다. 그 사이에 일어난 중요한 액션과 의사결정을 **노드(node)**로, 시간 순서대로 하나씩 올려두는 겁니다.

"종이 기반(paper-only)"이라는 말은 이런 뜻입니다.

  • 복잡한 툴에 집착하지 말고 순서, 명료함, 책임(ownership)에 집중한다
  • 최소 공통 분모 매체를 가정한다 (공유 문서, 종이 패드, 단순한 티켓 등)
  • 누구든 이 한 줄짜리 트랙만 보고 인시던트를 재구성할 수 있게 설계한다

실제로 이 레일은 선형(Linear) 의사결정 로그입니다.

  • 각 항목에 타임스탬프를 남기고,
  • 무엇을 했는지, 누가 결정했는지, 왜 그랬는지를 적습니다.
  • 분기 타임라인도, 병렬 트랙도 없습니다. 오직 하나의 주 선로만 존재합니다.

이 제약은 의외로 강력합니다. 팀에게 이런 질문을 던지게 만들기 때문입니다.

  • “이 인시던트의 정본(canonical) 기록은 무엇인가?”
  • “모든 중요한 의사결정은 어디에 기록되는가?”

정답은 항상 같아야 합니다. “레일 위에 있다.”


1단계: 초기 대응 레일 구간 설계하기

레일의 첫 부분은 초기 대응(initial response) 구간입니다. 인시던트를 어떻게 감지하고, 초기에 어떻게 분류·판단(triage)하며, 어떻게 에스컬레이션하는지를 담습니다.

1. 감지(Detection): 인시던트가 트랙에 올라오는 방식

먼저 인시던트가 레일에 “진입”하는 경로를 문서화합니다.

  • 모니터링 알림(Alerts)
  • 고객 신고
  • 내부 사용자 신고
  • 자동화된 이상 징후 탐지

각각에 대해, 누가 레일의 첫 노드를 올릴 권한이 있는지 명시합니다.

  • 온콜 SRE 또는 엔지니어
  • Support 리드
  • NOC 분석가

전형적인 첫 노드 템플릿은 다음과 같습니다.

[시간] – [이름]이 인시던트 선언. 소스: [알림/신고]. 초기 영향 범위: [영향 받는 시스템/고객]. 초기 심각도: [예상 등급].

슬랙, 페이징, 콜 등 환경이 아무리 시끄럽더라도, 레일의 첫 항목이 이 인시던트 스토리의 정본 시작점이 됩니다.

2. 트리아지(Triage): 초기 의사결정을 명시적으로 로그하기

트리아지 단계에서는 자잘한 액션이 많이 발생합니다. 레일 스케치는 **모든 키 입력이 아니라, 의미 있는 의사결정(material decisions)**에만 집중합니다.

예를 들면:

  • 심각도(severity) 변경 (예: Sev3 → Sev1)
  • 가설 채택 ("DB 과부하 이슈일 가능성이 크다")
  • 첫 번째 차단/완화(containment/mitigation) 시도

각각을 짧게 남깁니다.

[시간] – 트리아지: 심각도 Sev2 → Sev1으로 상향, 결정자 [이름]. 사유: [지표 X 급등, 고객 영향 Y].

[시간] – 가설: [이름]이 잠정 원인으로 [X]를 제안. 액션: [A, B 테스트 계획].

목표는 장황한 기록이 아니라, **추적 가능성(traceability)**입니다.

3. 에스컬레이션(Escalation): 트랙이 확장되는 시점과 방식

에스컬레이션 역시 명시적인 의사결정 유형으로 다룹니다.

  • 추가 팀을 호출하는 순간
  • 리더십이나 인시던트 커맨더(Incident Commander)를 개입시키는 시점
  • 커뮤니케이션 범위를 확장하는 결정 (Status Page, 고객 공지 등)

예시:

[시간] – 에스컬레이션: 인시던트 커맨더(IC) 역할을 [이름]에게 할당. 참여 팀: [백엔드, 보안]. 대외 커뮤니케이션 담당: [이름].

이 결정들을 레일에 올려두면, 사후에 에스컬레이션이 너무 느렸는지, 과도했는지, 엉뚱한 방향이었는지를 쉽게 돌아볼 수 있습니다.


차단과 셧다운: 고위험 의사결정 규칙을 명시적으로 만들기

장애 대응 중 가장 위험한 순간은 차단(containment)과 셧다운(shutdown) 의사결정입니다.

  • 코어 시스템을 중단시키는 결정
  • 특정 리전이나 데이터 센터로의 트래픽을 끊는 결정
  • 위험하지만 중요한 기능을 비활성화하는 결정

종이 기반 레일 스케치는 이런 결정을 위해 사전에 명시적인 규칙을 정의할 것을 강하게 요구합니다.

  1. 언제 차단/셧다운을 할 수(또는 해야) 있는지
  2. 누가 그런 권한을 가지는지
  3. 그 결정을 레일에 어떻게 기록할지

1. 언제 차단하거나 셧다운할 것인가

이는 **임계값(threshold)과 트리거(trigger)**로 코드화합니다.

  • 데이터 무결성(data integrity)이 위협받으면 → 쓰기(write) 경로 셧다운
  • P0급 보안 침해가 의심되면 → 영향 받은 컴포넌트 즉시 격리
  • 에러율이 X% 이상이 Y분 지속되고 롤백 가능하면 → 롤백 실행

런북(runbook)은 이 트리거들을 참조해야 하고, 레일의 기록은 해당 런북을 다시 참조해야 합니다.

[시간] – 차단: [이름]이 서비스 [S] 롤백 시작. 런북 [링크] 기반. 트리거: 10분간 에러율 80% 초과.

2. 누가 결정하는가

이런 고위험 액션에는 명확한 권한 라인이 필요합니다. 예를 들어:

  • 인시던트 커맨더(IC)는 시스템 셧다운을 승인할 수 있다
  • 보안 리드는 침해가 의심되는 호스트를 반드시 격리시킬 수 있다
  • SRE 리드는 특정 리전에 대한 트래픽 우회를 결정할 수 있다

레일 항목에는 반드시 **결정 책임자(decision owner)**를 적어야 합니다.

[시간] – 셧다운: IC [이름] 승인, 실행자 [이름]. 범위: [서비스]의 모든 외부 쓰기 비활성화. 사유: 데이터 손상 의심.

3. 어떻게 눈에 띄게 만들 것인가

차단과 셧다운 결정은 반드시:

  • 레일에서 눈에 띄게 표시해야 합니다. (예: CONTAINMENT/SHUTDOWN 태그)
  • 그 결정을 정당화한 근거(로그, 대시보드, 알림 등)에 링크해야 합니다.

이렇게 하면, 이후 리뷰에서 해당 지점을 쉽게 찾을 수 있고, **“그때 왜 그런 결정을 했지?”라는 사후 편향(hindsight bias)**으로부터 팀을 보호할 수 있습니다. 근거가 이미 트랙에 같이 녹아 있기 때문입니다.


오너십: 장애 동안 누가 ‘기차’를 운전하는가?

레일 스케치는 장애(outage) 오너십과 평소 인시던트 처리의 오너십을 명확히 구분합니다.

평상시 vs. 장애 시 오너십

낮은 심각도(Sev3/Sev4) 인시던트의 경우:

  • 보통 하나의 기능 팀 내에서 처리합니다.
  • 오너십은 기능 단위입니다. (예: “DB 알림은 DB 팀이 처리”)

레일 모델에서는 **대형 장애(Sev1/Sev2)**가 발생하면 인시던트 레일 오너십 모드로 전환합니다.

  • 지정된 **인시던트 커맨더(IC)**가 레일 전체를 소유합니다.
  • 각 기능 팀은 기여는 하지만, 전체 트랙의 소유자는 아닙니다.
  • 타임라인을 정리하는 **스크라이브(scribe) 또는 로거(logger)**를 따로 지정할 수 있습니다.

레일은 다음과 같은 질문에 명확히 답할 수 있어야 합니다.

  • 심각도, 차단, 커뮤니케이션에 대해 최종 결정권을 가진 사람은 누구인가?
  • 인시던트가 종료되었다고 선언할 수 있는 사람은 누구인가?

장애 중에, 예를 들어 특정 서비스를 셧다운할지 말지를 놓고 의견이 갈릴 때, 레일은 누가 결정권자인지 분명히 보여줍니다. 그리고 그 사람의 결정은 시간과 함께 레일에 기록됩니다.


적대적 환경에서도 버티는 의사결정 로그 만들기

종이 기반 레일 스케치는 로그 이상 탐지(log anomaly detection) 프레임워크인 AAR-log 등과도 잘 맞습니다. 이런 프레임워크는 다음에 중점을 둡니다.

  • 구조화된 로그(structured logs)
  • 액션 시퀀스에서 이상 패턴을 탐지
  • 기대되는 워크플로우에서 벗어난 지점을 강조

사람과 기계 모두가 쓰기 좋은 레일 구조화하기

사람과 도구(자동화) 모두를 지원하려면, 각 항목을 다음과 같이 정형화합니다.

  • 공통 필드 사용: 시간, 액터(actor), 역할(role), 액션(action), 범위(scope), 사유(reason), 링크(link)
  • 항목에 카테고리 태그를 붙입니다. 예: TRIAGE, ESCALATION, CONTAINMENT, SHUTDOWN, RECOVERY, COMMUNICATION

예를 들면:

[2026-03-08T10:15Z] | IC: Alice | TRIAGE | 심각도 Sev1으로 상향 | 사유: 3개 리전 영향, 트래픽의 25% 에러.

이런 구조를 가지면 다음이 가능해집니다.

  • 인시던트 흐름을 **자동 재생(replay)**해서 분석
  • 이상 탐지 (예: 트리거 없이 이뤄진 셧다운)
  • 정책 점검 (예: 차단이 적절한 역할의 승인 하에 이뤄졌는지)

적대적 환경에서의 로그 탄탄하게 만들기

보안 민감 시스템 등 일부 환경에서는 로그가:

  • 위·변조되거나
  • 불완전하게 남거나
  • 지연되어 기록될 수 있습니다.

단일 선로 레일은 이런 상황에서 다음과 같이 도움을 줍니다.

  • 다른 모든 기록이 이 레일과 대조·정합되어야 하는 **정본 서사 로그(canonical narrative log)**를 제공합니다.
  • 추가만 가능한(append-only), 시간 순서 보장 형태의 작성을 장려합니다.
  • 리뷰 시 빠진 액션이나 순서가 어긋난 부분이 눈에 띄게 만듭니다.

여기에 안전한 저장소, 무결성 체크를 결합하면, 이 레일은 꽤 강력한 포렌식(Forensic) 아티팩트가 됩니다.


단일 선로를 기반으로 한 비난 없는 포스트모템

인시던트가 끝나면, 레일은 **포스트모템의 척추(backbone)**가 됩니다.

의미 있는 모든 의사결정이 한 곳에 모여 있기 때문에:

  • 인시던트 전체를 며칠이 아니라 몇 분 만에 재구성할 수 있고,
  • 모든 참여자가 동일한 시간 순 서사에 합의한 상태에서 논의를 시작할 수 있으며,
  • 기억에 의존하지 않고, 관찰 가능한 결정들에 기반해 대화할 수 있습니다.

비난 없는 리뷰 진행하기

비난 없는(blameless) 포스트모템은 사람이 아니라 시스템을 바라보는 것에 초점을 둡니다. 레일은 다음을 도와줍니다.

  • 각 결정의 **맥락(context)**을 보여줍니다. (“10:15Z 시점에 우리가 알고 있던 것만 놓고 보면, 이 결정은 합리적이었는가?”)
  • 프로세스의 빈틈을 드러냅니다. (예: 없는 런북, 애매한 셧다운 임계값)
  • 실수만이 아니라, 압박 속에서 잘한 결정도 같이 드러나게 합니다.

레일을 보며 던질 수 있는 핵심 질문들:

  • 주요 결정을 내릴 때 어떤 신호(signal)가 부족했는가?
  • 오너십이나 임계값이 불분명해서 느려진 결정은 어디였는가?
  • 규칙에 비해 과잉 대응/과소 대응한 지점은 어디였는가?

이 논의의 결과로 나오는 것은:

  • 런북 업데이트 (예: 더 명확한 차단 트리거)
  • 오너십 명료화 (예: 누가 P0를 선언할 수 있는지)
  • 툴링 개선 (예: 중요 단계에 필요한 대시보드 링크 추가)

심리적으로도, 중립적인 선형 기록이 존재한다는 사실은 비난을 줄이는 데 도움이 됩니다. 논의는 **“이 시스템이 어떻게 이런 결정을 낳았는가”**에 초점이 맞춰지고, “누가 망쳤나”에서 벗어날 수 있습니다.


전체를 한데 모으기

종이 기반 인시던트 레일 스케치는 의도적으로 미니멀합니다. 복잡한 툴도, 무거운 프로세스도 필요 없습니다. 다만 다음에 대한 **규율(discipline)**이 필요할 뿐입니다.

  1. 각 주요 인시던트마다 단일, 정본 의사결정 트랙을 사용한다.
  2. 초기 대응 구간을 설계한다: 감지, 트리아지, 에스컬레이션을 명확히 기록한다.
  3. 차단·셧다운 규칙을 코드화한다: 언제, 누가, 어떻게 로그를 남길지.
  4. 장애 시 오너십을 명확히 한다: 특히 인시던트 커맨더가 누구이며 레일을 누가 운영하는지.
  5. 사람과 자동 분석 양쪽을 위한 구조화된 항목 형식을 사용한다.
  6. 포스트모템을 항상 이 레일 위에 **정박(anchor)**시키고, 이를 바탕으로 학습·개선을 수행한다.

인시던트 대응을 하나의 선형 의사결정 레일로 제한하면, 다음과 같은 이점을 얻습니다.

  • 장애 중 더 나은 상황 인식(situational awareness)
  • 고위험 액션에 대한 더 강한 거버넌스와 일관성
  • 사후에 더 풍부하고 신뢰도 높은 학습과 개선

시작은 작게 할 수 있습니다. 다음에 큰 인시던트가 발생하면, IC와 스크라이브를 지정하고, “레일”을 하나 그려 보세요. (문서에서 단순한 선형 리스트여도 괜찮습니다.) 그리고 의미 있는 의사결정을 모두 순서대로 기록해 두세요. 그 후, 그것이 장애 이해에 어떤 변화를 주는지 리뷰해 보십시오.

거기에서부터 조금씩 개선해 나가면 됩니다. 시간이 지날수록, 종이 기반 인시던트 레일 스케치는 인시던트 관리 실천의 **척추(spine)**가 될 수 있습니다. 단 한 줄의 레일이, 모든 장애 의사결정을 질서 있게 붙잡아 주는 구조가 되는 셈입니다.

종이 한 장으로 끝내는 인시던트 레일 스케치: 장애 의사결정을 위한 단일 선로 설계 | Rain Lag