Rain Lag

아날로그 인시던트 스토리 철도 정차장: 폭주하는 장애를 전환해 대형 사고를 막는 스위칭 스테이션 만들기

철도 안전, 형식 기법, AI 기반 라우팅에서 얻은 교훈을 바탕으로, 작은 장애가 서로 충돌해 대형 인시던트로 번지기 전에 전환·완화하는 ‘인시던트 스위칭 스테이션’으로 인시던트 프로세스를 설계하는 법을 다룹니다.

아날로그 인시던트 스토리 철도 정차장: 충돌 전에 폭주하는 장애를 우회시키는 스위칭 스테이션 설계하기

현대 디지털 기업의 프로덕션 환경은 더 이상 깔끔한 서버실이라기보다는 거대한 철도망에 가깝습니다. 분기하는 선로, 복잡한 분기점, 촘촘한 시간표, 그리고 고객 트래픽과 비즈니스 프로세스를 실어 나르는 끝없는 “열차” 흐름이 있죠. 모든 것이 제시간에 맞춰 움직일 때는 매끄럽게 느껴집니다. 하지만 한 번 장애가 터지면, 마치 혼잡한 조차장을 질주하는 폭주 기관차에 더 가깝습니다.

이 글에서는 특히 형식 기법(formal methods), 지능형 라우팅, 테이블탑(tabletop) 연습 같은 철도 안전 분야의 아이디어를 가져와, 하나의 인시던트 스위칭 스테이션을 설계하는 방법을 살펴봅니다. 목표는 단 하나입니다.

작은 장애가 서로 충돌하고 연쇄되기 전에, 미리 경로를 바꾸어 5단계 대형 인시던트로 번지는 것을 막는 것.


선로에서 스택으로: 왜 철도는 좋은 비유인가

철도망은 100년이 넘도록 안전이 생명인 초복잡 시스템을 다뤄 왔습니다. 열차가 탈선하거나 신호를 무시하면 사람의 생명이 위태로워집니다. 이런 수준의 리스크 때문에, 철도는 그 어떤 산업보다도 엄격한 공학적 관행을 발전시켜 왔습니다.

당신의 프로덕션 환경은 사람을 실어 나르지는 않지만, 다음과 같은 특성은 똑같이 가집니다.

  • 복잡하고 상호 의존적입니다. 서비스가 다른 서비스를 호출하고, 그 서비스는 데이터베이스, 네트워크, 외부 API에 의존합니다.
  • 시간에 민감합니다. 지연은 실시간으로 고객 경험과 매출에 영향을 줍니다.
  • **고위험(high‑stakes)**입니다. 연쇄 장애는 신뢰, 계약, 규제 준수에까지 타격을 줄 수 있습니다.

즉, 엔터프라이즈 인시던트 대응은 철도 운영과 매우 비슷하게 동작합니다. 한 노선의 실패가 빠르게 전파되며, 영향이 증폭됩니다. 철도는 이를 다음과 같이 관리해 왔습니다.

  • 신호 시스템이 안전하게 동작하는지 증명하기 위한 형식 기법
  • 열차를 적절한 시점에 올바른 선로로 보내기 위한 스위칭 스테이션(조차장)
  • 실패와 대응을 반복적으로 연습하는 정기적인 훈련과 시뮬레이션

이 원칙들은 그대로 인시던트 프로세스에 적용할 수 있습니다.


형식 기법: 안전 필수 시스템의 조용한 일꾼

철도 제어 시스템에서는 “빨리 만들고 깨지면서 배우자(move fast and break things)” 같은 접근이 통하지 않습니다. 대신 **형식 기법(formal methods)**을 사용합니다. 이는 시스템의 동작을 명세하고, 모델링하고, 검증하기 위해 수학적으로 정립된 기법들의 집합입니다.

핵심은 이겁니다. 형식 기법은 철도, 항공우주 등 안전 필수(safety‑critical) 분야에서 수십 년간 검증된 성공 사례가 있지만, **만능 은탄환(silver bullet)**은 존재하지 않습니다. 엔지니어들은 상황에 맞게 도구 상자에서 골라 씁니다.

  • 모델 체킹(model checking): 예를 들어 “두 열차가 동시에 같은 선로 구간에 진입하는 경우가 절대 없도록” 검증
  • 정리 증명(theorem proving): 특정한 ‘나쁜 상태’가 이론적으로 불가능함을 수학적으로 증명
  • 형식 명세 언어(Z, B, TLA+, Event‑B 등): 시스템이 어떻게 동작해야 하는지를 엄밀하게 기술

EN 50128, EN 50129 같은 철도 안전 표준은 배포 전에 치명적이면서도 미묘한 결함을 잡기 위해 이런 기법들을 강하게 권고하거나 의무화합니다.

하지만 일반적인 소프트웨어·운영팀에서는:

  • 많은 엔지니어가 형식 기법을 사용할 교육 기회가 부족합니다.
  • 형식 도구는 흔히 너무 학문적이고 무겁다고 인식됩니다.
  • 그래서 팀은 주로 “베스트 프랙티스”에 의존하며, 그게 충분하길 바랄 뿐입니다.

철도에서 얻어야 할 교훈은 “모두가 형식 기법 전문가가 되어야 한다”가 아닙니다. 핵심은 이 문장입니다.

리스크가 가장 높은 곳에서는, 직관만으로는 부족하다. 사전에 실패를 추론하기 위한 구조적이고 엄격한 사고 방식이 필요하다.

이 관점을 인시던트 관리에 실용적으로 녹여낼 수 있습니다.


당신의 프로덕션 환경은 거대한 철도망이다

각 서비스를 이렇게 상상해 봅시다.

  • 열차(trains): 고객 요청, 데이터 흐름, 배치 작업
  • 선로(tracks): API, 메시지 큐, 네트워크 경로
  • 역(stations): 서비스, 데이터베이스, 외부 제공자
  • 전철기(스위치, switches): 라우팅 로직, 피처 플래그, 서킷 브레이커

장애는 단순히 “열차 하나가 멈춘 것”이 아닐 때가 많습니다. 실제로는 대개 이렇게 진행됩니다.

  1. 한 노선에서 성능 저하 발생 (예: 데이터베이스 응답 지연)
  2. 이로 인해 열차가 밀리고 우회 경로로 빠져 나감
  3. 다른 노선(예: 폴백 서비스, 캐시, 외부 API)이 과부하에 걸림
  4. 그 결과 원인보다 더 심각한 2차 장애가 발생

이게 작은 알람이 순식간에 대규모 인시던트로 부풀어 오르는 이유입니다. 복잡한 의존성 네트워크가 실패를 빠르게 증폭·전파시키기 때문입니다.

이를 통제하려면 지능형 인시던트 라우팅이 필요합니다. 즉, 디지털 세계의 스위칭 스테이션이 필요합니다. 이 스테이션은 다음을 수행합니다.

  • 들어오는 “열차”(알람, 티켓, 이상 징후)를 감지하고
  • 어디로 보낼지 결정하며(어느 팀, 어느 런북, 어느 자동화 액션)
  • 서로 경쟁하는 우선순위와 대응이 충돌하지 않도록 막습니다.

인시던트 관리의 지능형 스위칭 스테이션화

현대적인 인시던트 프로세스는 다음 세 요소를 갖춘 스위칭 스테이션처럼 설계할 수 있습니다.

  1. AI와 지식 공학(knowledge engineering)
  2. 의존성과 리스크에 대한 수리적 모델링
  3. 구조화된 트리아지(triage) 워크플로우

1. AI와 지식 공학: 사내에 흩어진 ‘전문가 감’을 선로 지도화하기

대부분의 조직은 이미 인시던트에 대한 귀중한 지식을 갖고 있습니다. 다만 여기저기 흩어져 있을 뿐입니다.

  • 런북(runbook)
  • 과거 인시던트 리포트
  • 소스 코드와 설정 파일
  • 채팅 로그와 티켓 시스템

하지만 이런 정보는 대개 구조화되어 있지 않습니다.

**지식 공학(knowledge engineering)**은 이 모든 것을 하나의 그래프(graph)로 다룹니다.

  • 노드(node): 서비스, 컴포넌트, 팀, 리전·데이터센터 등 위치
  • 엣지(edge): 의존성, 데이터 흐름, 소유 관계, SLA 등

여기에 AI 모델을 올려서 다음을 수행하게 할 수 있습니다.

  • 들어오는 알람을 자동 분류
  • 과거 패턴을 기반으로 가능성 높은 근본 원인 후보 제안
  • 관련 런북이나 대시보드 추천

이렇게 되면 당신의 스위칭 스테이션은 다음과 같은 일을 할 수 있습니다.

  • "Region A의 스토리지 레이턴시 알람은 보통 Service B의 API 타임아웃으로 이어진다"는 패턴을 인지
  • 적절한 팀을 더 빨리 호출
  • 어떤 “열차”를 우선적으로 처리해야 하는지 자동으로 정렬

2. 수리적 모델링: 가벼운 형식 기법 아이디어 가져오기

완전한 정리 증명 시스템을 도입하지 않아도, 형식적 사고의 이점은 충분히 얻을 수 있습니다.

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

  • 의존성을 그래프로 모델링하고 다음을 계산:
    • 블래스트 레디우스(blast radius): 특정 컴포넌트 장애 시 영향 받을 수 있는 서비스 집합
    • 크리티컬 컷셋(critical cut set): 소수의 컴포넌트만 고장 나도 핵심 기능을 위협하는 조합
  • 인시던트 대응에 대한 불변 조건(invariant) 정의:
    • “어떤 인시던트도 명시적 오너가 없이는 종료할 수 없다.”
    • “P1 인시던트는 15분 이상 이해관계자 업데이트 없이 방치될 수 없다.”

그리고 도구(또는 간단한 스크립트)를 이용해 인시던트 도중에 이런 불변 조건을 자동으로 체크하게 만들 수 있습니다. 이것은 형식 기법 사고의 가벼운 실용 버전입니다. 절대 일어나서는 안 되는 상태를 정의하고, 이를 벗어나지 못하게 가드레일을 설치하는 방식입니다.

3. 구조화된 트리아지: 스위칭의 인간적 측면

아무리 뛰어난 자동화라도 결국 인간의 의사결정이 필요합니다. 여기서 **구조화된 트리아지(triage)**가 중요해집니다.

좋은 트리아지는 다음 네 가지 질문에 신속하게 답할 수 있어야 합니다.

  1. 무엇이 얼마나 망가졌는가? (영향 범위와 심각도)
  2. 누가 언제까지 영향을 받는가? (고객, 규제 기관, 내부 팀)
  3. 이 선로의 주인은 누구인가? (담당 팀, 온콜 담당자, 에스컬레이션 경로)
  4. 가장 안전한 초기 대응은 무엇인가? (롤백, 레이트 리밋, 피처 플래그 조정, 페일오버 등)

서로 다른 우선순위가 충돌하지 않게 하려면:

  • **명확한 심각도 레벨(P1–P4)**을 정의하고, 모호함이 없도록 기준을 구체화해야 합니다.
  • 라우팅 규칙을 미리 정해야 합니다. (예: 고객 결제 장애는 항상 내부 툴 문제보다 우선)
  • **인시던트 커맨더(incident commander)**를 ‘수석 디스패처’처럼 두어 상충되는 대응을 조율하게 해야 합니다.

이렇게 하면 트리아지 프로세스 자체가 하나의 제어 시스템이 됩니다.

  • 동일 리소스를 두고 두 인시던트가 경쟁하는 상황을 막고
  • 가장 영향이 큰 장애가 가장 빠르고 집중적인 대응을 받을 수 있게 합니다.

테이블탑 연습: 시뮬레이션 탈선에서 배우는 진짜 교훈

철도 운영사는 정기적으로 훈련을 합니다. 신호기가 고장 나면? 다리 위에서 열차가 멈추면? 특정 선로 구간이 사용 불능이 되면?

테크 업계에서 이에 해당하는 것이 바로 테이블탑(tabletop) 인시던트 연습입니다. 테이블탑은 다음과 같은 특징을 가집니다.

  • 저비용·저위험으로 현실적인 인시던트를 시뮬레이션
  • 실제 시스템이 아닌 회의실(또는 화상 회의)에서, 시나리오 기반으로 진행

일반적인 테이블탑은 이렇게 구성됩니다.

  1. 시나리오 제시 (예: “Region X의 결제 API 레이턴시가 급증한다.”)
  2. 시간 경과에 따라 새로운 “이벤트”를 공급 (고객 문의, 새로운 알람, 일부 로그 조각 등)
  3. 참가자들에게 실제 장애 상황처럼 대응해 보라고 요청

이 연습의 목적은 사람들이 모든 답을 알고 있는지 시험하는 것이 아닙니다. 진짜로 보고 싶은 것은 다음과 같습니다.

  • 커뮤니케이션 흐름: 누가 누구와 얼마나 빠르게 소통하는가?
  • 의사결정 구조: 누가 페일오버를 결정하는가? 누가 롤백을 지시하는가? 누가 P1 격상을 선언하는가?
  • 프로세스 명확성: 사람들은 어떤 팀을 어떻게 호출해야 하는지, 런북이 어디 있는지 아는가?

테이블탑을 해 보면 다음과 같은 갭이 드러납니다.

  • “우리는 이 핵심 의존성의 실제 오너가 누군지 모른다.”
  • “런북에 적힌 대시보드 링크가 이미 오래전에 바뀌었다.”
  • “고객 공지를 누가 책임지는지 명확하지 않다.”

이런 하나하나의 갭이 바로 어긋난 전철기입니다. 실제 탈선이 일어나기 전에 미리 고칠 수 있는 부분입니다.


스위칭 스테이션 접근법: 기법, 라우팅, 연습의 결합

지금까지 이야기한 요소들을 결합하면, 인시던트 관리를 위한 스위칭 스테이션 접근법이 나옵니다.

  1. 형식 기법적 사고

    • 불변 조건, 안전 속성, 핵심 의존성을 명시적으로 정의합니다.
    • 단순한 도구라도 활용해, 이런 가정들이 실제로 지켜지는지 검증합니다.
  2. 지능형 인시던트 라우팅

    • AI와 구조화된 지식을 이용해 인시던트를 분류·예측·라우팅합니다.
    • “누가 대응해야 하는지, 어떤 런북·대시보드를 봐야 하는지” 같은 자명한 추천은 자동화합니다.
  3. 테이블탑 연습과 리허설

    • 실제로 가장 두려운 시나리오들을 정기적으로 연습합니다.
    • 그 과정에서 스위칭 규칙, 프로세스, 플레이북을 계속 다듬습니다.

시간이 지나면 조직은 이렇게 변합니다.

  • 완전한 반응형 조직(“망가질 때마다 그때그때 우왕좌왕 대응”)에서
  • 선제적이고 조율된 조직(“망가져도, 어떻게 연쇄 붕괴를 막을지 알고 있는”)으로.

폭주하는 장애 자체를 완전히 없앨 수는 없습니다. 하지만 잘 설계된 철도 조차장처럼, 당신은 다음을 갖추게 됩니다.

  • 무엇이 잘못될 수 있는지 이해할 수 있는 지도
  • 실패를 지능적으로 우회시킬 수 있는 스위치
  • 압박 속에서도 침착하게 대응할 수 있는 훈련

결론: 다음 충돌 전에 인시던트 조차장을 설계하라

완전한 형식 검증이나 최첨단 AI를 한 번에 도입할 필요는 없습니다. 지금 당장 시작할 수 있는 세 가지 구체적인 단계부터 밟아 보세요.

  1. 선로를 지도화하라.
    • 핵심 서비스, 의존성, 소유 팀을 문서화합니다.
  2. 스위치를 정의하라.
    • 명확한 트리아지 규칙, 심각도 레벨, 라우팅 로직을 만듭니다.
  3. 탈선을 리허설하라.
    • 정기적으로 테이블탑 인시던트 연습을 하고, 매번 프로세스를 개선합니다.

그 다음 단계로는 구조를 조금씩 더해 나가면 됩니다.

  • 인시던트 프로세스 자체에 기본적인 모델링과 불변 조건 개념을 적용해 보세요.
  • 지식 그래프와 머신러닝을 활용해 알람의 우선순위를 정하고 라우팅해 보세요.
  • 리스크가 높은 영역에는 형식 기법에서 더 많은 아이디어를 가져와, 그에 걸맞은 엄격함을 도입하세요.

궁극적인 목표는 완벽이 아니라 **복원력(resilience)**입니다. 잘 운영되는 철도처럼, 목표는 모든 실패를 없애는 것이 아니라, 무언가가 선로를 이탈했을 때도 스위칭 스테이션이 다른 모든 것을 들이받기 전에 경로를 바꿔 주도록 만드는 것입니다.

지금 이 순간, 다음 폭주 열차가 조차장을 떠나기 전에 그 스테이션을 설계하기 시작하세요.

아날로그 인시던트 스토리 철도 정차장: 폭주하는 장애를 전환해 대형 사고를 막는 스위칭 스테이션 만들기 | Rain Lag