Rain Lag

아날로그 사고 기록기: 무서운 프로덕션 버그마다 쓰는 종이 블랙박스 만들기

항공 블랙박스에서 영감을 얻은 가볍고 구조화된 “종이 블랙박스”를 설계하고 사용하는 방법을 소개합니다. 모든 아찔한 프로덕션 장애의 핵심 맥락을 놓치지 않고 기록해, 혼란을 반복 가능한 학습 엔진으로 바꾸는 방식입니다.

소개

비행기가 추락하면 조사관들은 흐릿한 기억이나 여기저기 흩어진 로그에 의존하지 않습니다. 비행기에서 **플라이트 레코더(블랙박스)**를 회수해, 실제로 무슨 일이 일어났는지 한 단계씩 재구성합니다.

소프트웨어 세계에서 대부분의 팀은 정반대 상황을 겪습니다. 무서운 프로덕션 버그가 터지면 모두가 허겁지겁 뛰어다니고, 몇 장의 스크린샷이 Slack에 붙고, 로그 검색을 좀 돌려보다가… 세부 정보는 그대로 사라집니다. 사후 분석(Postmortem)을 열 때쯤(열리기만 하면 다행인 수준으로), 이야기는 흐릿하고 부분적이며, 결국 사람들의 기억에 의존해 왜곡된 상태가 됩니다.

이걸 고치려고 100페이지짜리 프로세스나 거창한 도구가 필요한 건 아닙니다. 필요한 건 종이 블랙박스입니다. 즉, 모든 프로덕션 장애를 대상으로 핵심 맥락을 일관되게, 구조화된 방식으로 기록하는 아날로그 스타일의 사고 플라이트 레코더입니다.

이 글에서는 “아날로그 사고 플라이트 레코더”가 무엇인지, 왜 효과적인지, 그리고 포스트모템을 더 신뢰할 수 있고, 블레임리스하며, 진짜로 도움이 되게 만들어 줄 구현 방법을 단계적으로 설명합니다.


사고용 “종이 블랙박스”란 무엇인가?

종이 블랙박스는 영향도가 있는 모든 프로덕션 장애에 대해 다음과 같은 내용을 기록하는, 가볍고 표준화된 템플릿입니다.

  • 무엇이 관측되었는지
  • 언제 시작되고 언제 종료되었는지
  • 어떤 시스템이 관련되었는지
  • 사람들이 무엇을 하고 어떤 결정을 내렸는지
  • 어떤 증거(로그, 메트릭, 트레이스, 스크린샷 등)가 남아 있는지

“아날로그”라는 말은 실제 종이에만 써야 한다는 뜻은 아닙니다(그렇게 해도 상관은 없습니다). 핵심은 이런 마인드입니다: 사람이 읽기 쉬운 구조화된 형식으로 적어 남겨라. 도구가 바뀌어도 남고, 나중에 봐도 이해하기 쉬운 형태로요.

영감은 항공기 플라이트 레코더에서 왔습니다. 플라이트 레코더는 조종간 조작, 엔진 계측값, 조종실 음성 기록 등 여러 스트림의 데이터를 계속 수집해, 조사관이 추측이 아니라 정밀한 데이터로 사고를 재구성할 수 있게 해 줍니다.

당신의 목표도 비슷합니다. 아드레날린이 빠져나간 뒤에도 장애의 전체 스토리를 다시 재구성할 수 있을 만큼의 맥락을 꾸준히 모으는 것입니다.


왜 사고 플라이트 레코더가 필요한가

1. 기억은 끔찍한 포렌식 도구다

사고 한가운데서 사람들은 동시에 여러 일을 떠안고 있습니다.

  • 쏟아지는 알림 노이즈
  • 이해관계자의 질문
  • 디버깅 가설들
  • 완화·우회 시도

나중에는 시간 순서를 잘못 기억하고, 사건의 순서를 혼동하며, 자신이 한 행동에 과도하게 비중을 둘 수밖에 없습니다. 악의가 아니라, 그냥 인간이라서 그렇습니다.

플라이트 레코더 템플릿은 이런 것들을 바깥으로 꺼내 기록합니다.

  • 주요 이벤트와 액션의 타임스탬프
  • 언제 무엇이 바뀌었는지 (배포, 설정 변경, 피처 플래그 토글 등)
  • 그때 사람들은 무엇을 믿고 있었는지, 그리고 가설이 어떻게 바뀌었는지

이 기록이 바로 신뢰할 수 있는 포스트모템의 척추가 됩니다.


2. 표준화가 포스트모템을 비교 가능하게 만든다

그때그때의 메모는 그때그때의 배움으로 끝납니다. 어떤 사고는 장문의 리포트가 남고, 어떤 사고는 Jira 티켓 두 줄이면 끝납니다. 6개월이 지나면 둘을 비교하는 건 사실상 불가능합니다.

표준화된 사고 템플릿을 쓰면:

  • 매번 같은 핵심 정보를 빠짐없이 담을 수 있고
  • 익숙한 구조 덕분에 사고 리뷰가 더 빠르게 진행되고
  • 여러 사고를 가로질러 스캔하면서 반복되는 패턴을 찾을 수 있습니다.

시간이 지나면, 종이 블랙박스들은 단순한 이야기 모음이 아니라 하나의 데이터셋이 됩니다.


3. 블레임리스, 항공 스타일의 조사를 부추긴다

항공 업계는 오래전에 깨달았습니다. “누가 망쳤는가”에 집중하는 건 막다른 길이라는 사실을요. 생산적인 질문은 이런 것들입니다.

  • 그때 그 사람들에게는, 왜 그렇게 행동하는 게 말이 되었는가?
  • 어떤 조건들이 그들을 실패하기 쉬운 상태로 몰아넣었는가?
  • 어떤 시스템 방어막이 없거나 약했는가?

좋은 사고 플라이트 레코더는 사람 개인이 아니라 시스템과 결정들에 초점을 맞추도록 설계되어 있습니다. 팀이 이런 질문을 하도록 유도합니다.

  • 어떤 신호들이 있었는가?
  • 그 중 어떤 신호는 감지되었고, 어떤 신호는 무시되었으며, 그 이유는 무엇인가?
  • 도구, 문서, 조직 구조가 이런 선택에 어떤 영향을 미쳤는가?

목표는 학습과 시스템 강화이지, 처벌이 아닙니다.


4. 기술적 신호와 사람의 행동을 연결한다

요즘 Observability 도구들은 끝없이 많은 데이터를 뿜어냅니다.

  • 로그(logs)
  • 메트릭(metrics)
  • 트레이스(traces)

이 모든 건 매우 유용하지만, 누가 언제 무엇을 했는지에 대한 타임라인이 없으면 결국 사후에 추측으로 상관관계를 맞춰야 합니다.

종이 블랙박스는 이런 연결을 명시적으로 남깁니다.

  • "10:13, 온콜이 피처 플래그 X를 OFF로 토글"
  • "10:14, 서비스 Y의 에러율이 80% 감소"

이 연결 덕분에 루트 코즈 분석이 훨씬 명확해지고, 이후 인시던트 런북을 개선할 때도 실제로 효과 있었던 액션이 무엇인지 알 수 있습니다.


5. 보안·포렌식 관점을 안정성과 접목한다

보안 및 포렌식 팀은 항상 **추적 가능성(traceability)**을 생각합니다.

  • 어떤 아티팩트가 존재하는가?
  • 어디에 저장되어 있는가?
  • 나중에 조사할 수 있도록 어떻게 보존할 것인가?

각각의 안정성 인시던트도 이런 마인드로 다루면:

  • 관련 로그, 트레이스, 메트릭 스냅샷을 모아 서로 연결하고
  • 중요한 컨텍스트(예: 설정 diff, 배포 버전)를 보존하며
  • 변경사항과 가정의 **감사 추적(audit trail)**을 유지할 수 있습니다.

그 결과, 다음과 같은 일들이 훨씬 쉬워집니다.

  • 미묘한 루트 코즈를 추적하기
  • 시스템적 약점을 식별하기
  • 안정성과 보안 이슈가 겹치는 상황에 대응하기

사고 플라이트 레코더 템플릿 설계하기

템플릿은 사람들이 실제로 쓸 만큼 짧으면서도, 쓸모 있을 만큼 구조화되어야 합니다.

아래는 실무에서 바로 써볼 수 있는 출발점입니다.

1. 헤더: 기본 정보

  • Incident ID: (고유 식별자)
  • 날짜 / 시간 (시작–종료):
  • 심각도 / 영향 수준:
  • 관련 서비스 / 컴포넌트:
  • Incident Commander / 주요 대응자:

2. 최초 감지

  • 어떻게 감지되었는가? (알림, 사용자 신고, 내부 QA 등)
  • 처음 관측한 것은 무엇인가? (증상, 에러 메시지, 스크린샷 등)
  • 가장 이른 영향 발생 시점은?

3. 이벤트 타임라인

시간 순으로 정렬된 주요 이벤트 목록입니다. 각 항목에는 다음이 포함되어야 합니다.

  • 타임스탬프 (타임존 포함)
  • 액터(Actor) (사람, 프로세스, 시스템)
  • 액션 / 이벤트 (무엇이 일어났는지)
  • 증거 링크 (로그 쿼리, 메트릭 그래프, 트레이스, 티켓, Slack 스레드 등)

예시:

  • 10:07 – PagerDuty 알림 발생: checkout-service 5xx > 5% (알림 링크)
  • 10:09 – 온콜이 알림을 확인; DB CPU 스파이크 확인 (대시보드 링크)
  • 10:13 – 피처 플래그 new_pricing OFF로 토글 (링크)
  • 10:14 – 5xx 비율이 기준선 수준으로 하락 (메트릭 링크)

4. 수집된 기술적 신호들

이번 인시던트에서 실제로 어떤 데이터를 살펴보았는지 기록합니다.

  • Logs: (사용한 쿼리, 서비스명, 시간 범위)
  • Metrics: (참조한 대시보드, 핵심 그래프)
  • Traces: (대표적인 trace ID)
  • 기타 아티팩트: (코어 덤프, pcap 파일, 스크린샷 등)

이 섹션은 나중에 누군가가 “X를 디버깅하는 방법”을 배우고 싶을 때 참고할 수 있는 레퍼런스가 되기도 합니다.

5. 인간의 맥락과 결정들

여기서는 사람 쪽 이야기를 담습니다.

  • 고려했던 주요 가설들 (그리고 언제 어떻게 바뀌었는지)
  • 내렸던 핵심 결정들 (롤백 vs 핫픽스 vs 설정 변경 등)
  • 작용한 제약이나 압박 (시간 압박, 비즈니스 영향, 불완전한 데이터 등)

표현은 최대한 중립적이고 사실 위주로 유지합니다.

10:20 – 팀은 DB 인덱스 회귀가 원인이라는 가설을 세움. 실시간으로 스키마를 수정하는 대신 직전 배포를 롤백하기로 결정.

여기서 하는 일은 그 당시에는 왜 그렇게 하는 게 말이 되었는지를 기록하는 것이지, 사후에 평가·판단하는 것이 아닙니다.

6. 루트 코즈 및 기여 요인들

조사가 끝난 뒤, 다음을 정리합니다.

  • 직접적인 기술적 원인 (무엇이 실제로 고장 났는가)
  • 기술적 기여 요인들 (잠복 버그, 누락된 테스트 등)
  • 조직·프로세스 요인들 (부재한 부하 테스트, 불명확한 오너십 등)
  • 탐지·대응 관련 요인들 (시끄럽기만 한 알림, 부재한 런북 등)

이 섹션은 사고가 충분히 정리된 뒤, 가능하면 포스트모템 미팅 중이나 직후에 작성하는 것이 좋습니다.

7. 후속 조치와 방어막

배운 것을 구체적인 변화로 전환합니다.

  • 단기 대응 (패치, 설정 변경 등)
  • 중기 개선 (테스트 추가, 자동화, 문서·런북 업데이트 등)
  • 장기 방어막 (아키텍처 변경, 교육, 새로운 가드레일 추가 등)

각 항목에는 다음을 포함합니다.

  • 담당자(Owner)
  • 마감일(Due date)
  • 관련 티켓·프로젝트 링크

실제로 굴러가게 만드는 방법

작게 시작하고, 모든 “무서운” 인시던트에 적용하라

완벽한 템플릿이나 완벽한 툴링을 기다리지 마세요. 단순한 문서나 폼으로 시작해서 다음과 같은 경우에 적용해 보세요.

  • 특정 심각도 이상의 모든 인시던트
  • 누군가를 새벽에 깨운 모든 사건
  • 고객에게 눈에 띄는 에러나 데이터 리스크를 유발한 모든 상황

완벽함보다 중요한 것은 일관성입니다. 템플릿은 써 가면서 점진적으로 다듬으면 됩니다.

기존 도구와 통합하되, 사람 눈으로 읽기 쉽게 유지하라

예를 들어 이렇게 할 수 있습니다.

  • 공유 폴더, Notion, 위키 등에 기록을 저장하고
  • 각 섹션이 미리 들어간 폼이나 티켓 템플릿을 쓰고
  • 기록에서 모니터링·로깅 도구로 링크를 걸어 두는 방식

핵심은 어느 엔지니어나 이해관계자든, 내부 시스템 다섯 개에 접근하지 않고도 기록만 보면 상황을 이해할 수 있어야 한다는 점입니다.

포스트모템 시간을 반드시 확보하라

플라이트 레코더는 원재료일 뿐, 결과물이 아닙니다. 여전히 다음이 필요합니다.

  • 짧지만 구조화된 포스트모템 미팅
  • 레코더 내용을 함께 훑어볼 퍼실리테이터
  • 루트 코즈와 후속 조치에 대한 합의

아날로그 기록이 좋아질수록, 이 미팅들은 더 빠르고 더 집중력 있게 진행됩니다.


인시던트를 학습 데이터셋으로 바꾸기

사고 플라이트 레코드를 계속 쌓다 보면, 자연스럽게 패턴이 보이기 시작합니다.

  • 특정 서비스가 전체 인시던트의 60%에 등장한다
  • 특정 배포 파이프라인 단계 뒤에 자주 장애가 발생한다
  • 빠뜨리거나 쓸모없는 알림 때문에 탐지가 반복해서 지연된다

모든 기록이 같은 구조를 따르기 때문에, 다음이 가능해집니다.

  • 컴포넌트, 원인, 패턴별로 인시던트를 태깅하고 필터링하기
  • 분기별로 인시던트를 리뷰하며 시스템적 약점을 찾기
  • 투자 근거를 만들기 (예: “이 의존성 때문에 이미 5번의 장애가 났다. 재설계가 필요하다.”)

종이 블랙박스는 이렇게 단발성 문서를 넘어서, 지속적인 개선 엔진으로 진화합니다.


결론

아날로그 사고 플라이트 레코더를 도입하는 일은, 무서운 프로덕션 버그를 다루는 방식을 근본적으로 바꾸는 간단하지만 강력한 시도입니다. 취약한 기억과 채팅 로그에 기대는 대신, 다음을 하게 됩니다.

  • 각 인시던트에 대한 구조화된, 사람이 읽을 수 있는 기록을 남기고
  • “좋은” 사고 문서화가 무엇인지 팀 차원의 기준을 만들며
  • 배움을 중심에 둔 블레임리스, 항공 스타일의 조사를 장려하고
  • 기술적 신호를 사람의 결정과 행동과 연결하며
  • 시스템을 단단하게 만들기 위한 장기적인 데이터셋을 구축합니다.

새로운 도구가 필요하지 않습니다. 필요한 건 템플릿 하나, 약간의 규율, 그리고 아픈 인시던트 하나하나를 학습의 기회로 삼겠다는 공감대입니다.

프로덕션 시스템을 항공기처럼 대하세요. 비행기에는 블랙박스가 필요하고, 당신의 시스템에도 마찬가지입니다. 그리고 문제가 생길 때마다, 팀이 그런 블랙박스를 가지고 있다는 사실이 주는 명료함을 누릴 자격이 있습니다.

아날로그 사고 기록기: 무서운 프로덕션 버그마다 쓰는 종이 블랙박스 만들기 | Rain Lag