아날로그 인시던트 스토리 객차: 장애 한가운데서도 침착한 결정을 돕는 종이로 된 객실 설계하기
상상이지만, 벽 가득 종이가 붙은 조용한 열차 객실을 떠올리면 인시던트 대응 문화가 훨씬 더 침착하고 명료하며 효과적으로 바뀔 수 있다. 특히 모든 것이 불타는 듯 느껴질 때일수록 그렇다.
아날로그 인시던트 스토리 객차
장애 한가운데서도 침착한 결정을 돕는 종이 객실 설계하기
프로덕션이 불타고 있을 때, 보통 당신의 뇌도 같이 불타고 있다. 아드레날린은 치솟고, Slack 알림은 폭주하고, 누군가는 “DNS 문제일 거야”라고 말하며, 팀의 절반은 곧장 코드베이스로 뛰어들어 오히려 상황을 악화시킬 수 있는 “영리한” 수정에 매달린다.
만약 장애 상황에서의 기본 모드가 ‘패닉’이 아니라 ‘침착함’이라면 어떨까? 가상의 전쟁터 같은 화상 회의방 대신, 훨씬 더 아날로그한 공간을 떠올려 보자. 모든 벽이 종이로 가득한 조용한 열차 객차, 팀이 모여 ‘허둥대지 않고 생각’하는 곳.
이 정신 모델—아날로그 인시던트 스토리 객차(Analog Incident Story Railway Carriage)—는 의도적이고, 드라마가 적고, 학습에 초점을 둔 인시던트 대응을 설계하는 방법이다. 장애 한가운데 그 객차에 들어선다고 상상해 보자. 필요한 정보는 모두 종이 위에 정리돼 있고, 역할은 분명하며, 위험한 묘수보다는 안전하고 보수적인 선택에 강하게 편향되어 있다.
이 글에서는 실제 위기가 닥쳤을 때 팀이 ‘영웅적인 실수’ 대신 ‘좋은 결정’을 내릴 수 있도록, 이런 문화를 만들고 그것을 뒷받침하는 시스템을 어떻게 설계할지 단계별로 살펴본다.
객차에 올라타기: 혼란보다 선행하는 명료함
우리의 상상 속 열차 객차 안에는 디지털이 없다. 벽에는 큰 종이들이 붙어 있다.
- 역할 보드(roles board): 지금 누가 무엇을 맡고 있는지
- 타임라인: 어떤 일이 언제 일어났는지
- 시스템 맵(system map): 핵심 서비스, 의존성, 트래픽 흐름
- 플레이북 코너(playbook corner): 흔한 인시던트와 복구 액션에 대한 런북(runbook)
중요한 건 종이 그 자체가 아니다. 종이가 강제하는 명료함이다.
명확한 역할: 누가 말하고, 누가 행동하고, 누가 기록하는가
효과적인 인시던트 대응은 각자가 자신의 역할을 명확히 이해하는 데서 시작한다. 최소한 다음 역할은 정의해 두자.
- 인시던트 커맨더(Incident Commander, IC) – 키보드를 잡지 않고, 조율과 의사결정을 책임진다.
- 커뮤니케이터(Communicator) – 이해관계자와 고객에게 상태를 알린다(Statuspage, 이메일, 내부 채팅 등).
- 스크라이브(Scribe) – 타임라인, 결정, 관찰 내용을 기록한다.
- 오퍼레이터 / 엔지니어(Operators / Engineers) – 조사하고 실제 변경을 수행한다.
IC는 이 객차의 지휘자와 같다. 악기는 연주하지 않지만, 전체 연주가 깨지지 않도록 이끈다.
이 단순한 구조만으로도 가장 흔한 혼란 패턴을 상당 부분 막을 수 있다.
- 모두가 영웅이 되려고 덤벼든다.
- 전체 그림에 책임지는 사람이 없다.
- 이해관계자는 아무 정보도 못 받거나, 서로 상충되는 열 가지 버전의 이야기를 받는다.
incident.io, PagerDuty 같은 인시던트 도구는 이런 역할을 배정하고 추적하는 일을 훨씬 수월하게 해 준다. 그렇지만 핵심 원칙은 여전히 아날로그다. 한 사람, 한 역할, 모두가 볼 수 있게 분명히 적어 두는 것.
공유 가시성: 전체 이야기를 보여주는 종이 벽
대부분의 장애는 실제 심각도보다 더 심각하게 느껴진다. 이유는 아무도 전체 그림을 보지 못하기 때문이다. 누군가는 로그만, 다른 사람은 대시보드만, 누군가는 소문만 쥐고 있다.
객차 안의 벽은 이 이야기를 시각화한다.
- 타임라인 시트 – 증상이 처음 관측된 시점, 우리가 바꾼 것, 메트릭이 달라진 시점은 언제인가?
- 가설 리스트 – 의심되는 원인을 명시적으로 적고, 틀렸다는 게 확인되면 줄을 그어 없앤다.
- 현재 액션 보드 – 지금 이 순간 무슨 일이 진행 중인지, 그리고 누가 담당자인지.
디지털 세계에서는 이것이 다음과 같이 구현된다.
- 중앙 인시던트 채널 또는 룸(예: 전용 Slack 채널)
- 고정 메시지 또는 자동 요약(현재 상태, 가설, 활성화된 완화 조치)
- 인시던트 동안 함께 작성하는 공유 문서
핵심은 인시던트를 사람에게도 관측 가능하게 만드는 것이다. 머신만 모니터링하고 사람이 전체 상황을 못 보면, 같은 일을 여러 번 반복하거나, 이미 폐기된 가설을 다시 뒤쫓거나, “누군가 했겠지”라고 가정하다 필요한 액션이 빠지기 쉽다.
지루한 길 선택하기: 영웅적 행동보다 보수적 대응
대부분의 인시던트는 인생에 한 번 있을까 말까 한 일종의 ‘대참사’가 아니다. 반복해서 일어나는 루틴한 사건이다. 그리고 이런 루틴한 인시던트일수록, 대응도 지루할수록 좋다.
- 시스템이 이미 회복 중이라면, 지켜보며 기다린다.
- 마지막 배포를 롤백한다.
- 새로 켰거나 수상한 기능 플래그를 끈다.
- 중요하지 않은 트래픽을 줄이거나 차단한다.
영웅적인 수정은 손맛이 있다. 실시간으로 로직을 뜯어고치고, 프로덕션에 핫픽스를 올리고, 동시에 가능한 모든 레버를 당겨 보는 것. 하지만 이런 행동은 위험이 가장 커졌을 때 위험을 더 키우는 일이다.
객차 안에는 **보수적 플레이북(Conservative Playbook)**이 붙어 있어야 한다.
- 격리(Isolate) – 영향 범위를 줄일 수 있는가? (레이트 리밋, 실험 기능 끄기 등)
- 되돌리기(Revert) – 마지막으로 ‘정상적으로’ 동작하던 버전으로 롤백할 수 있는가?
- 비활성화(Disable) – 문제를 일으킬 가능성이 있는 기능을 플래그로 꺼둘 수 있는가?
- 일시 중지(Pause) – 전파 지연이나 외부 의존 시스템의 자가 복구를 기다릴 수 있는가?
이것들을 ‘마지막 수단’이 아니라 가장 먼저 고려하는 선택지로 만들어야 한다. 시간이 지날수록 팀은 ‘침착하게, 먼저 되돌리는’ 행동이 칭찬받고, 위험한 묘수는 설령 결과적으로 잘 먹혀도 리뷰에서 질문의 대상이 된다는 걸 학습하게 된다.
저(低)드라마 문화: 침착함은 타고나는 성격이 아니라 설계 결과
침착한 사람을 채용한다고 해서 인시던트가 자동으로 침착해지지는 않는다. 침착하도록 설계해야 한다.
의도적으로 ‘지루한’ 인시던트 문화에는 몇 가지 특징이 있다.
- 예측 가능한 의식(ritual) – 모든 인시던트가 비슷한 구조를 따른다: 선언, 역할 할당, 안정화, 커뮤니케이션, 리뷰.
- 비난 없음, 고성 없음 – 심리적 안전은 가정이 아니라 규칙으로 지킨다.
- 언어 절제 – “재앙이다(disaster)”, “대참사(catastrophe)”, “다 망했다” 같은 표현을 피한다. “EU 사용자의 체크아웃에서 오류율 상승”처럼 구체적인 표현을 쓴다.
- 쉼을 장려 – IC는 2~3분 정도의 ‘잠깐 멈춤’을 공식적으로 선언해 생각을 정리하거나 가정을 점검하게 할 수 있다.
목표는 장애를 가볍게 보자는 게 아니다. 위험이 클수록 의사결정의 질을 지키기 위한 장치를 만드는 것이다. 침착한 사람은 더 나은 트레이드오프를 하고, 더 좋은 질문을 던지며, 불필요한 에스컬레이션을 피한다.
이 객차는 애초에 **조용한 칸(quiet car)**으로 설계된 것이다.
로그는 선로: 단순하고 믿을 수 있고 이미 거기에 있어야 한다
좋은 로그가 없으면, 어두운 곳에서 감으로 때려 맞추는 수밖에 없다. 장애 상황에서 ‘감’은 매우 비싼 도박이다.
인시던트가 일어나기 전에, 단순하고 지루한 로깅에 투자해야 한다. Node.js에서 널리 쓰이는 예로 Winston이 있지만, 어떤 라이브러리를 쓰느냐보다 중요한 건 다음과 같은 특성이다.
- 일관성(Consistency) – 모든 서비스가 구조화된, 예측 가능한 포맷으로 로그를 남긴다.
- 컨텍스트(Context) – 상관관계 ID(correlation ID), (적절한 수준의) 사용자 ID, 활성화된 기능 플래그, 요청 메타데이터 등을 포함한다.
- 심각도 레벨(Severity levels) –
info,warn,error,critical등을 구분하고 일관되게 사용한다. - 보관 및 검색(Retention & Search) – 여러 서비스와 필요한 시간 구간에 걸쳐 로그를 쉽게 검색할 수 있다.
이 열차에서 로그는 기차 아래의 선로와 같다. 다음에 어디를 살펴봐야 할지 안내해 준다. 장애 도중에 허겁지겁 로깅을 추가하려고 한다면, 이미 최악의 타이밍에 과거의 기술 부채에 이자를 물고 있는 셈이다.
로깅은 위기 대응책이 아니라, 기본 엔지니어링 습관이 되어야 한다.
객차 안의 페어링: 두 개의 뇌, 하나의 키보드
인시던트는 인지적 부담이 크다. **페어링(pairing)**은 안전성과 속도를 동시에 높이는 가장 쉬운 방법 중 하나다.
인시던트 대응 규범을 설계할 때, 위험도가 높은 액션은 페어를 전제로 하자.
- 한 명은 키보드를 잡고 명령을 실행한다.
- 다른 한 명은 생각을 소리 내어 정리하고, 가정을 질문하고, 입력할 명령을 큰 소리로 함께 확인한다.
이 방식의 이점은 다음과 같다.
- 단순 실수를 걸러낸다(잘못된 서버, 잘못된 브랜치, 잘못된 리전 등).
- 생각을 명시적으로 만들도록 유도한다. ("이 그래프는 2분 안에 내려갈 거라고 예상합니다.")
- 사후 인시던트 리뷰를 위한 공통 컨텍스트를 만든다.
상상 속 객차에서, 작은 테이블 앞에 둘이 앉아 있다고 그려보자. 한 사람은 타이핑을 하고, 다른 사람은 벽의 스토리를 업데이트한다. 이것이 목표로 삼아야 할 모델이다.
도구는 객차의 인프라: incident.io, PagerDuty, 그리고 친구들
좋은 도구는 프로세스를 대체하는 게 아니라, 프로세스를 강화한다.
incident.io, PagerDuty 같은 플랫폼은 다음을 도와줄 수 있다.
- 인시던트 생성과 역할 할당을 자동화한다.
- 표준화된 채널, 템플릿, 상태 페이지를 제공한다.
- 타임라인을 자동으로 캡처한다(참여/퇴장, 역할 변경, 핵심 메시지 등).
- 대시보드, 알림, 티켓 시스템과 연동해 핸드오프를 부드럽게 만든다.
이 도구들을 객차 주변의 철도 인프라라고 생각하자.
- 응답 시간을 줄여준다(빠른 페이징, 빠른 조율).
- 인지 부하를 낮춘다(사람이 전체 플레이북을 외우지 않아도 된다).
- 인시던트의 스토리가 나중에 학습 자료로 남도록 보장한다.
도구가 당신의 침착하고 저(低)드라마인 철학을 지지해야 한다. 도구가 문화를 지배하게 두지 말자.
성장 마인드셋: 탈선을 더 나은 선로로 바꾸기
최고의 시스템에서도 인시던트는 일어난다. 실수도 반드시 일어난다. 질문은 “어떻게 모든 장애를 막을 것인가?”가 아니라, “각 인시던트에서 최대한 많이 배우려면 어떻게 해야 하는가?”여야 한다.
인시던트에 대한 **성장 마인드셋(growth mindset)**은 다음과 같이 생겼다.
- 블레이멀리스(blameless) 리뷰 – 사람 탓이 아니라, 시스템과 인센티브에 초점을 맞춘다.
- 확신보다 호기심 – “이 오류가 가능했거나, 보이지 않게 만든 건 무엇인가?”를 묻는다.
- 구체적인 후속 조치 – 통찰을 액션으로 바꾼다. 더 나은 알림, 더 견고한 기본값, 런북 개선, 코드 변경 등.
- 피드백 루프 – 인시던트에서 얻은 배움을 팀 간에 공유하고, 한 팀 안에 가두지 않는다.
사후 인시던트 리뷰는 객차 벽에 마지막 장을 써 내려가는 일이라고 생각하자.
- 무슨 일이 있었는가?
- 무엇이 우리를 놀라게 했는가?
- 무엇이 잘 작동했고, 앞으로도 유지해야 할 것은 무엇인가?
- 무엇이 불필요하게 상황을 어렵게 만들었는가?
- 무엇을 언제까지 바꿀 것인가?
시간이 지나면, 각 인시던트는 **선로(시스템, 도구)**와 **승무원(사람, 습관)**을 모두 조금씩 더 나아지게 만든다.
우리 팀으로 객차 가져오기
실제로 종이로 벽을 도배하거나 진짜 열차 객차를 만들 필요는 없다. 대신 다음 원칙부터 빌려오면 된다.
- 인시던트를 위한 역할을 정의하고, 부담이 적은 상황에서 드릴을 통해 연습한다.
- 위기가 오기 전에 로깅을 표준화한다.
- 지루한 액션에 편향되도록 한다: 롤백, 기능 플래그, 트래픽 셰이핑.
- 인시던트 동안 위험한 변경에는 페어링을 적용한다.
- 역할, 타임라인, 상태가 잘 보이도록 도와주는 도구를 도입한다.
- 블레이멀리스 리뷰를 통해 처벌이 아니라 학습에 초점을 맞춘다.
아날로그 인시던트 스토리 객차는 비유일 뿐이다. 하지만 이 비유가 상징하는 침착함은 매우 현실적인 목표다. 다음 장애가 터졌을 때, 팀은 익숙한 조용한 공간에 들어선 느낌을 받아야 한다. 역할이 분명하고, 정보가 눈에 잘 보이고, 안전하고 신중한 결정을 향한 공통된 약속이 있는 그런 공간 말이다.
그 공간을 지금 설계하자. 선로가 아직 깨끗하고, 열차가 제시간에 달리고 있을 때.