문제가 전혀 보이지 않는다면… 아마 제대로 들여다보지 않은 것일 겁니다
현실 세계에서 고장은 언제나 발생한다. 하드웨어에서도, 소프트웨어에서도, 시스템 곳곳에서. 위대한 시스템 설계의 핵심은 고장을 완전히 없애는 것이 아니다.
고장이 나더라도 시스템 전체가 무너지지 않도록 만드는 것.
특히 안전이 생명인 시스템이라면, 무언가 반드시 고장 나야 한다면 사람을 안전하게 지키는 방식으로 고장 나야 한다. 바로 이 지점에서 영리한 '중복 설계(Redundancy)’가 빛을 발하게 된다.
고장이 발생했을 때, 시스템은 크게 세 가지 모습 중 하나를 보여준다.
1. 무중단 (No failure at all)
예: 이중화된 장치 중 하나가 고장 나면 대기 장치가 즉시 가동된다. 시스템은 이를 감지하고 자연스럽게 전환하며, 결과적으로 신뢰성과 안전성 모두 확보하게 된다.
2. 안전 쪽으로의 실패 (Safe-side failure)
예: 신호등 회로의 녹색불 드라이버가 고장 나면, 시스템은 빨간불을 켜는 쪽으로 반응한다. 교통은 잠시 지체되지만, 사고 위험은 없습니다.
3. 위험한 실패 (Unsafe failure)
예: 같은 신호등이지만, 이번에는 고장이 녹색불을 ‘고정’시켜 버린다면? 차량들이 동시에 교차로로 진입하며 위험한 상황이 발생하게 된다.
훌륭한 설계란 (2) 같은 안전 실패는 충분히 드물게, (3) 같은 위험한 실패는 극도로 드물게 만드는 것이다. 그리고 이 확률은 MTBF(Mean Time Between Failure: 평균고장간격) 목표와 SIL(Safety Integrity Level: 안전 무결성 등급) 요건에 맞게 설계되어야 한다.
무작위적 하드웨어 고장은 FMECA(Failure Mode, Effects, and Criticality Analysis: 고장 유형·영향·치 분석)나 FTA(Fault Tree Analysis: 결함수 분석)로 수치화할 수 있다.
반면 체계적(Systematic) 고장은 단순한 계산으로 잡히지 않는다. 그래서 국제 안전 표준과 절차적 규율이 필요하다.
Faults are inevitable. Failure doesn’t have to be.
고장은 언젠가 반드시 일어난다. 하지만 그것이 실패로 이어질지 여부는 전적으로 우리의 설계 철학과 실행에 달려 있다.