복잡한 시스템은 어떻게 실패하는가
해커뉴스에 화제가 된 고전 논문 'How Complex Systems Fail'의 핵심 내용으로, 복잡한 시스템(교통, 의료, 발전 등)은 본질적으로 위험하며 다층적 방어에도 불구하고 항상 잠재적 결함을 안고 작동한다고 설명합니다. 대형 사고는 단일 원인이 아니라 여러 작은 실패가 겹쳐야 발생하므로, 사고 후 '근본 원인'을 찾는 접근은 근본적으로 잘못되었다고 지적합니다. 시스템 안전과 장애 분석을 다루는 실무자에게 필수 관점을 제공하는 글입니다.
복잡한 시스템은 본질적으로 위험한 시스템이다. 흥미로운 시스템들(예: 교통, 의료, 발전)은 모두 그 자체의 특성상 본질적으로, 그리고 불가피하게 위험하다. 위험에 노출되는 빈도는 다소 변경될 수 있지만, 시스템에 관련된 프로세스 자체는 본질적이고 축소 불가능하게 위험하다. 바로 이러한 위험의 존재가 이러한 시스템의 특징인 위험 방어 대책의 구축을 이끌어낸다.
복잡한 시스템은 실패에 대해 강력하고 성공적으로 방어된다. 실패의 심각한 결과 때문에 시간이 지나면서 다중 방어 계층이 구축된다. 이러한 방어에는 명백한 기술적 요소(예: 백업 시스템, 장비의 '안전' 기능)와 인적 요소(예: 훈련, 지식)뿐 아니라 다양한 조직적, 제도적, 규제적 방어(예: 정책과 절차, 인증, 업무 규칙, 팀 훈련)가 포함된다. 이러한 조치의 효과는 통상적으로 작업을 사고로부터 돌려놓는 일련의 방패를 제공하는 것이다.
대형 사고는 여러 실패의 결합을 필요로 한다 – 단일 지점의 실패만으로는 부족하다. 방어 체계는 효과가 있다. 시스템 작업은 대체로 성공적이다. 노골적인 대형 실패는 작고 겉보기에 무해한 실패들이 결합하여 시스템 전체 사고의 기회를 만들어낼 때 발생한다. 이러한 각각의 작은 실패는 대형 사고를 일으키기 위해 필요하지만, 실패를 허용하기에는 오직 그 결합만으로 충분하다. 다시 말해, 노골적인 시스템 사고보다 훨씬 많은 실패 기회가 존재한다. 대부분의 초기 실패 궤적은 설계된 시스템 안전 요소에 의해 차단된다. 실무 수준까지 도달하는 궤적은 대부분 차단되며, 주로 실무자들에 의해 차단된다.
복잡한 시스템은 끊임없이 변화하는 잠재적 실패들의 혼합을 내포한다. 이러한 시스템의 복잡성 때문에 여러 결함이 존재하지 않고는 작동하는 것이 불가능하다. 이 결함들은 개별적으로는 실패를 일으키기에 불충분하기 때문에 작동 중에는 사소한 요인으로 간주된다. 모든 잠재적 실패의 근절은 주로 경제적 비용에 의해 제한되지만, 또한 사고 발생 전에는 그러한 실패가 사고에 어떻게 기여할 수 있는지 미리 파악하기 어렵기 때문이기도 하다. 실패는 기술, 업무 조직, 실패 근절 노력의 변화 때문에 끊임없이 변한다.
복잡한 시스템은 저하된 모드로 작동한다. 앞의 논점에서 파생되는 결론으로, 복잡한 시스템은 고장난 시스템으로서 작동한다. 시스템은 매우 많은 중복성을 갖고 있고, 많은 결함이 존재함에도 사람들이 시스템이 작동하게 만들 수 있기 때문에 계속 기능한다. 사고 이후 검토에서 거의 항상 시스템이 과거에 재앙을 거의 일으킬 뻔했던 이전의 '전조 사고(proto-accidents)'의 이력을 갖고 있었다고 지적한다. 이러한 저하된 상태가 노골적인 사고 전에 인식되었어야 한다는 주장은 대개 시스템 성능에 대한 순진한 개념에 근거한 것이다. 시스템 작업은 동적이며, 구성 요소(조직적, 인적, 기술적)들이 실패하고 끊임없이 교체된다. 재앙은 항상 코앞에 도사리고 있다.
복잡한 시스템은 대형 실패의 가능성을 내포한다. 인간 실무자들은 거의 항상 이러한 잠재적 실패와 물리적·시간적으로 가까운 곳에 있다 – 재난은 언제든지, 거의 어느 곳에서든 발생할 수 있다. 대형 결과의 가능성은 복잡한 시스템의 특징이다. 이러한 대형 실패의 가능성을 제거하는 것은 불가능하다. 이러한 실패의 가능성은 시스템 자체의 특성상 항상 존재한다.
사고 이후 '근본 원인(root cause)'으로 귀속시키는 것은 근본적으로 잘못되었다. 노골적인 실패가 여러 결함을 필요로 하기 때문에, 사고의 고립된 '원인'이라는 것은 존재하지 않는다. 사고에는 여러 기여 요인이 있다. 이들 각각은 그 자체만으로는 사고를 만들기에 불충분하다. 이러한 원인들이 함께할 때만 비로소 사고를 일으키기에 충분하다. 실제로, 바로 이러한 원인들이 서로 연결되는 것이 사고에 필요한 상황을 만들어낸다. 따라서, '근본 원인'의 분리라는 것은... (원문이 여기서 잘림)