Rain Lag

아날로그 인시던트 스토리 모바일 항만: 책상 위 회전하는 종이 항구에 장애를 정박시키기

책상 위에 올려둔 작은 회전식 종이 “항구”가 어떻게 딱딱한 기술 보고서였던 인시던트 리뷰를, 신뢰성·회복탄력성·팀 문화를 함께 키우는 살아 있는 이야기로 바꿀 수 있는지에 대해 다룹니다.

아날로그 인시던트 스토리 모바일 항만: 책상 위 회전하는 종이 항구에 장애를 정박시키기

여러분의 인시던트 히스토리가 대시보드, 티켓, 그리고 잊혀진 포스트모템에만 머무르지 않고, 책상 위에 놓인 작은 회전식 종이 “항구”에도 함께 존재한다면 어떨까요? 각 장애가 작은 배처럼 그곳에 정박합니다. 단순히 메트릭과 타임라인만 싣고 오는 게 아니라, 그때의 감정, 트레이드오프, 배운 점까지 함께 싣고 옵니다.

이것이 바로 아날로그 인시던트 스토리 모바일 항만(Analog Incident Story Mobile Harbor) 의 아이디어입니다. 신뢰성과 문화, 실패를 탐구하는 저기술(low-tech) 물리 도구죠. 시각화 도구인 동시에 기억 궁전(memory palace)이자 대화의 불씨이고, 놀랍게도 팀이 더 회복탄력적인 시스템을 설계하는 데 실제로 도움이 됩니다.

이 글에서는 왜 신뢰성이 단순한 업타임을 넘어서는지, 왜 감정에 기반한 회고가 숨겨진 진실을 드러내는지, 그리고 어떻게 간단한 종이 항구가 복잡한 신뢰성 개념을 모두가 이해할 수 있게 만들어 주는지 살펴봅니다.


인시던트에는 기술적 포스트모템만으로는 부족한 이유

대부분의 인시던트 리뷰는 비슷하게 시작합니다.

  • 무엇이 깨졌는가?
  • 언제 시작되었는가?
  • 얼마나 오래 지속되었는가?
  • 다시 일어나지 않게 어떻게 막을 것인가?

이 질문들은 중요하지만, 불완전합니다. 결정적으로 빠져 있는 것이 하나 있습니다. 바로 인시던트 전·중·후에 사람들이 어떻게 느끼고, 어떻게 행동했는가 입니다.

감정 회고(emotional retrospective) 는 여기에 이런 질문들을 더합니다.

  • 알람이 울리기 전에, 사람들이 처음으로 뭔가 이상하다감지한 순간은 언제였는가?
  • 누가 편하게 의견을 냈고, 누가 침묵을 선택했는가?
  • 어떤 부분은 절차가 명확하게 느껴졌고, 어떤 부분은 혼란스러웠는가?
  • 어디에서 사람들이 수치심, 비난, 혹은 후폭풍에 대한 두려움을 느꼈는가?

이 감정 신호들은 종종 더 깊은 문제를 가리킵니다.

  • 실수를 처벌하는 문화 때문에, 사람들이 초기 경고 신호를 숨기는 조직
  • 소수만 “불 끄는 사람(fixer)”으로 여겨지는 히어로 문화로 인한 번아웃과 병목
  • 헷갈리는 런북, 모호한 오너십, 아무도 믿지 않는 시끄러운(alert noise) 알람들

감정을 사실과 함께 기록하면, 인시던트 히스토리는 단순한 장애 목록을 넘어섭니다. 팀의 심리적 안전감, 지식 공백, 프로세스 마찰을 보여주는 지도(map)가 됩니다.

이 지점에서 아날로그 시각 도구인 모바일 항만이 빛을 발합니다. 속도를 늦추고, 이야기를 하게 만들며, 모니터에 찍힌 숫자가 아니라 사람들이 실제로 어떻게 겪었는지를 담을 공간을 강제로 만들어 줍니다.


신뢰성은 업타임만이 아니다

우리는 종종 “신뢰성(reliability)”을 “서비스가 살아 있다(up)”는 말과 거의 같은 뜻으로 사용합니다. 하지만 실제 신뢰성은 훨씬 더 섬세한 개념입니다. 여기에 포함되는 것은 예를 들어:

  • 회복탄력성(Resilience): 시스템이 실패 이후에 어떻게 동작하는가

    • 결함 허용(fault tolerance) – 특정 실패는 사용자에게 거의 보이지 않게 흡수할 수 있는가?
    • 점진적/우아한 성능 저하(graceful degradation) – 무언가 깨져야 한다면, 최대한 “부드럽게” 깨지는가?
    • 복구(recovery) – 얼마나 빠르고 안전하게 좋은 상태로 돌아올 수 있는가?
  • 가용성(Availability): 사용자가 기대할 때, 약속한 수준의 품질을 제공하는가?

    • 단순히 HTTP 200 응답이 뜨는지가 아니라, 충분히 빠르고, 충분히 정확하고, 충분히 자주 동작하는가.

신뢰성은 이분법(있다/없다)이 아닙니다. 항상 이런 질문으로 요약됩니다.

우리는 무엇을, 누구에게, 어떤 조건에서 약속했는가? 그리고 그 약속을 지켰는가?

기술적으로 보면 사소해 보이는 인시던트라도 사용자 신뢰에는 치명적일 수 있습니다. 반대로, 내부적으로는 엄청난 위기처럼 느껴지는(예: 내부 시스템 대규모 장애) 문제라도, 고객에게는 거의 보이지 않을 수 있습니다.

신뢰성 관련 작업은 막연한 “더 안정적으로 만들자”가 아니라, 명확하게 합의된 기대치에 의해 이끌려야 합니다.


실패를 전제로 하기: 불가피한 일을 위한 설계

현대 시스템은 너무 복잡해서 “절대 안 망가지는 것”을 목표로 할 수 없습니다. 언젠가는 반드시:

  • 중요한 컴포넌트가 오작동합니다.
  • 클라우드 리전, 서드파티 API, 데이터베이스가 장애를 겪습니다.
  • 예상치 못한 워크로드로 인해 성능이 급격히 저하됩니다.
  • 미처 예상하지 못했던 리소스 한계에 도달합니다.

이건 비관주의가 아니라, 현실주의입니다.

따라서 신뢰성은 나중에 “덧붙이는(add-on)” 것이 될 수 없습니다. 처음부터 설계에 녹여 넣어야 합니다. 예를 들면:

  • 코드 레벨 – 타임아웃, 백오프가 있는 재시도, 멱등성(idempotency), 입력 검증
  • 인프라 레벨 – 중복 구성(redundancy), 페일오버 계획, 용량 계획(capacity planning), 격리(isolation)
  • 운영 레벨 – 런북, 인시던트 훈련, 명확한 역할 정의, 이스컬레이션 경로

여기서 아날로그 항만 메타포가 도움이 됩니다. 각 실패 모드를 언젠가 반드시 정박하려고 찾아올 “배”라고 상상해 보세요. 당신은:

  • 정박할 부두(미리 정해 둔 대응 패턴)를 갖고 있는가?
  • 예인선(툴, 런북, 사람들)은 준비되어 있는가?
  • 등대(알람과 대시보드)는 그 배가 오는 걸 미리 비춰 주는가?

실패를 전제로 한다는 건 혼돈을 받아들이겠다는 뜻이 아닙니다. 현실을 인정하고, 그 위에서 차분하게 설계하겠다는 뜻입니다.


“충분히 좋음” 정의하기: 설계를 이끄는 신뢰성 요구사항

신뢰성을 공허한 상태에서 설계할 수는 없습니다. 설계를 이끌 합의된 신뢰성 요구사항(reliability requirements) 이 필요합니다. 예를 들어:

  • 사용자 경험 기대치 – 어느 정도의 느림까지는 괜찮은가? 어떤 플로우는 미션 크리티컬이고, 어떤 플로우는 있으면 좋은 수준인가?
  • 데이터 요구사항 – 데이터가 결국(eventually) 일치하면 되는가, 아니면 강한 일관성(strong consistency)이 필요한가? 허용 가능한 데이터 손실 창(window)은 있는가?
  • 워크플로 특성 – 사용자가 야간에 배치 작업을 돌리는가, 아니면 실시간 상호작용에 의존하는가?
  • 특이한 워크로드 패턴 – 트래픽이 스파이크성인가? 장기 실행 잡이 많은가? 쓰기 비중이 높은가? 읽기 비중이 높은가?

이 요구사항들이 명시적이면, 다음과 같은 장점이 있습니다.

  • 아키텍처 선택을 안내합니다. (예: 단일 리전 vs 멀티 리전, 캐시 전략, 큐잉 여부 등)
  • 트레이드오프를 분명히 합니다. (예: 레이턴시 vs 일관성, 속도 vs 비용, 단순함 vs 중복성)
  • 실패 전·중·후 각각에서 “충분히 좋음” 이 무엇인지 사전에 정의할 수 있습니다.

모바일 항만의 각 인시던트 카드에는 이렇게 적을 수 있습니다.

  • 어떤 신뢰성 요구사항이 위반되었는지
  • 어느 정도 심각하게 위반되었는지
  • 원래의 요구사항이 애초에 현실적인 것이었는지

그러다 보면 문제는 장애 자체만이 아니었다는 걸 깨닫게 됩니다. 사용자가 필요로 했던 것과 우리가 약속했던 것 사이의 불일치가 핵심이었을 수도 있습니다.


관측가능성과 공유된 가시성: 함께 폭풍을 바라보기

빠른 탐지와 깊이 있는 학습은 관측가능성(Observability)공유된 가시성(shared visibility) 에 달려 있습니다.

  • 메트릭(Metrics) – 지연 시간, 에러율, 자원 포화도, 처리량 같은 정량 신호
  • 로그(Logs) – 컨텍스트와 디버깅을 위한 상세 이벤트 기록
  • 트레이스(Traces) – 서비스 간을 관통하는 엔드투엔드 경로와 시간/에러 위치 파악
  • 알람(Alerts) – “정말로 중요한 무언가”가 잘못되었을 때 알려 주는 선별된 신호

하지만 툴만으로는 부족합니다. 또한 필요한 것은:

  • 공유 뷰 – 서로 다른 팀도 함께 읽고 토론할 수 있는 대시보드
  • 공유 언어 – 서비스, 의존성, 사용자 여정을 지칭하는 공통 명칭과 용어
  • 공유 오너십 – 운영, 개발, 프로덕트, 고객 지원이 서로 다른 조각이 아니라 같은 현실을 바라보는 상태

아날로그 항만은 여기서도 도움이 됩니다. 각 카드에 다음을 적을 수 있습니다.

  • 인시던트 동안 어떤 대시보드나 그래프가 유용했는지, 혹은 전혀 도움이 안 되었는지
  • 어떤 신호는 너무 늦게, 어떤 신호는 너무 자주, 어떤 신호는 아예 울리지 않았는지
  • 몇 개 팀이 협업해야 했고, 그들이 어떤 수준의 가시성을 갖고 있었는지

종이 카드 하나를 가리키며 “이 그래프가 우리를 속였어요”라고 말할 수 있을 때, 닫힌 인시던트 티켓 속에 묻힌 불만보다 훨씬 쉽게 관측가능성을 개선할 수 있습니다.


단순함 vs 단일 실패 지점: 균형 찾기

“시스템을 단순하게 만들어라”는 말은 좋은 조언입니다. 하지만 그 과정에서, 깨끗한 추상화처럼 보이는 거대한 단일 실패 지점(SPOF, Single Point of Failure) 을 만들어 버릴 수도 있습니다.

단순함은 신뢰성에 여러모로 도움이 됩니다.

  • 버그와 오구성(misconfiguration)이 생길 수 있는 표면적을 줄입니다.
  • 모두가 머릿속에 떠올리고 공유할 수 있는 정신 모델을 쉽게 만듭니다.
  • 디버깅과 온보딩 속도를 높여 줍니다.

그러나 과도한 단순화는 이런 문제를 낳을 수 있습니다.

  • 하나의 서비스, 하나의 팀, 하나의 데이터베이스에 너무 많은 책임이 집중됩니다.
  • “마법 같은” 컴포넌트 뒤에 복잡한 실패 모드가 숨겨집니다.
  • 그 중앙 요소가 실패했을 때, 우아하게 성능을 낮추는(graceful degradation) 것이 불가능해집니다.

모바일 항만의 각 인시던트 카드(배)에는 이렇게 적어 둘 수 있습니다.

  • 이번 장애는 복잡성(너무 많은 움직이는 부품, 추적하기 어려운 상호작용) 때문에 발생했는가?
  • 아니면 과도한 단순화(한 서비스가 너무 많은 일을 함, 모두가 의존하는 단일 DB/큐 등) 때문에 발생했는가?

이렇게 하면 팀이 솔직해집니다. “마이크로서비스가 답이다”, “모놀리식이 답이다” 같은 이데올로기가 아니라, 실제 프로덕션이라는 바다에서 각 설계 선택이 어떻게 작동했는지를 기록하는 셈입니다.


회전하는 종이 항구로 신뢰성을 프로토타입하기

그렇다면 아날로그 인시던트 스토리 모바일 항만은 실제로 어떻게 생겼을까요?

책상 위에 올려놓은 작은 회전식 받침(예: 미니 회전 트레이, 이른바 ‘레이지 수전(lazy Susan)’ 같은 것)을 떠올려 보세요. 그 원형 베이스 가장자리, 즉 원형 항구를 따라 인시던트 카드나 작은 “배”들을 꽂아 둡니다. 각 배는 실제 인시던트 하나를 나타냅니다.

각 카드는 다음과 같은 내용을 담을 수 있습니다.

  • 이름: 기억에 잘 남는, 사람 말 같은 인시던트 이름 (예: "화요일 타임아웃 폭풍")
  • 타임라인: 시작, 탐지 시점, 완화(mitigation), 최종 해결
  • 영향: 영향을 받은 사용자, 깨진 워크플로, 어겨진 약속
  • 신뢰성 측면: 가용성, 회복탄력성의 동작, 복구 패턴
  • 관측가능성 메모: 도움이 된 것, 우리를 헷갈리게 한 것
  • 설계 질문: 이번 일을 통해 드러난 가정, 복잡성, 아키텍처 관련 인사이트
  • 감정 스냅샷: 팀이 느낀 감정을 몇 단어로 – 혼란, 좌절, 자부심, 공포, 차분함 등

이 항만으로 다음과 같은 활동을 할 수 있습니다.

  • 팀 미팅 때 항만을 돌리면서 무작위로 한 척의 배를 골라 리뷰합니다.
  • 비슷한 인시던트끼리 묶을 수 있습니다. (예: 타임아웃 관련, 특정 의존 서비스 관련 등)
  • 스티커나 색깔 마커를 사용해 패턴을 강조할 수 있습니다. (예: 관측가능성 부족은 빨간색, 오너십 불분명은 파란색 등)

이 물리적 모델은 프로토타입이자 교육 도구입니다.

  • 새로 합류한 사람들은 “항만을 한 바퀴 돌면서” 팀의 신뢰성 히스토리를 몸으로 느낄 수 있습니다.
  • 이해관계자들은 추상적인 신뢰성을 손으로 만질 수 있는 구체적인 이야기로 접하게 됩니다.
  • 엔지니어들은 티켓 목록에서는 잘 드러나지 않던 패턴을 발견할 수 있습니다.

그 순간, 신뢰성은 막연한 목표가 아니라, 과거의 폭풍과 앞으로의 개선이 돌아가며 전시된 살아 있는 회전식 박물관이 됩니다.


결론: 과거를 정박시켜 미래를 항해하기

신뢰할 수 있는 시스템은 깔끔한 아키텍처 다이어그램이나 훌륭한 업타임 수치만으로 정의되지 않습니다. 그것은 다음에 의해 빚어집니다.

  • 우리가 인시던트를 사람으로서 어떻게 경험하는지
  • 사용자와 어떤 기대치를 어떻게 협상하는지
  • 실패가 없을 것이라고 가정하는 대신, 실패를 전제로 두고 설계하는지
  • 사일로가 아닌, 여러 팀이 함께 현실을 어떻게 관측하는지
  • 단순함과 중복·유연성 사이의 균형을 어떻게 잡는지

아날로그 인시던트 스토리 모바일 항만은 이 모든 것을 한눈에 보이게 해 주는 장난기 있으면서도 강력한 방법입니다. 과거의 장애들을 책상 위 회전식 종이 항구에 정박시키는 행위는 곧 다음을 위한 공간을 만드는 일입니다.

  • 문화와 프로세스 문제를 드러내는 감정 회고
  • 회복탄력성, 가용성, 다양한 트레이드오프에 대한 구체적인 논의
  • 엔지니어, 프로덕트, 고객 지원, 리더십이 함께 참여하는 협업 학습

더 신뢰할 수 있는 소프트웨어를 만들기 위해 반드시 화려한 하드웨어가 필요하지는 않습니다. 종이와 펜, 회전판 하나, 그리고 이미 지나간 폭풍을 솔직하게 마주보겠다는 마음이면 충분합니다.

여러분의 인시던트는 이미 이야기를 하고 있습니다. 질문은 이것입니다. 다음 배가 항구로 들어오기 전에, 그 이야기에 귀 기울이고, 배우고, 그리고 다시 설계할 준비가 되어 있는가요?

아날로그 인시던트 스토리 모바일 항만: 책상 위 회전하는 종이 항구에 장애를 정박시키기 | Rain Lag