결함허용 (Fault Tolerance)
쉽게 풀면
사람은 신장(콩팥)을 두 개 가지고 있어서, 하나가 손상되더라도 나머지 하나가 기능을 이어받아 몸 전체는 큰 문제 없이 작동을 계속할 수 있습니다. 결함허용은 시스템을 이런 식으로 설계하는 것을 말합니다. 부품 하나가 고장 나더라도 시스템 전체가 갑자기 멈추거나 위험한 상태에 빠지지 않고, 성능이 다소 떨어지더라도 작동을 이어갈 수 있도록 미리 대비해두는 것입니다. 항공기가 엔진 하나를 잃어도 나머지 엔진으로 비행을 계속할 수 있게 설계되는 것도 같은 원리입니다.
왜 중요한가
결함허용은 분산시스템, 항공우주, 자율주행, 클라우드 인프라처럼 일부 구성요소의 고장이 곧바로 전체 서비스 중단이나 인명 피해로 이어질 수 있는 시스템 설계에서 핵심 요구사항으로 다루어집니다. 시스템 규모가 커지고 구성요소 수가 늘어날수록 어느 한 부품의 고장 확률은 오히려 높아지기 때문에, 신뢰성 있는 대규모 시스템을 설계하려는 연구에서는 결함허용 메커니즘을 어떻게 구현하고 검증하는지가 핵심 논의 대상이 됩니다.
논문에서는 이렇게 쓰입니다
이 문장은 센서 몇 개가 갑자기 고장 나더라도, 전체 시스템은 성능 저하 없이 정상적으로 계속 작동했다는 사실을 실험을 통해 확인했다는 뜻입니다. 즉 개별 부품의 고장이 시스템 전체의 실패로 이어지지 않았다는 것을 보여준 것입니다.
분산시스템 및 블록체인 연구에서, 단순 고장뿐 아니라 악의적이거나 예측 불가능하게 동작하는 노드까지 포함한 더 어려운 조건에서도 결함허용을 보장함을 보일 때 쓰이는 문장이다.
조금 더 깊게 보면
결함허용을 구현하는 방법은 여러 층위로 나뉩니다. 하드웨어 이중화나 여분의 부품을 두는 방식 외에도, 여러 노드가 일치된 결과에 도달하도록 하는 합의(consensus) 알고리즘, 오류를 스스로 감지하고 복구하는 자가치유(self-healing) 기법, 일부 노드가 고의로 잘못된 값을 보내도 견디는 비잔틴 결함허용(Byzantine fault tolerance) 등이 대표적입니다. 논문에서 결함허용을 논할 때는 단순 정지 고장(fail-stop)만 가정하는지, 아니면 더 까다로운 비잔틴 결함까지 다루는지에 따라 요구되는 설계와 증명의 난이도가 크게 달라진다는 점을 함께 살펴볼 필요가 있습니다.
주의할 점
결함허용을 이중화와 같은 개념으로 혼동하기 쉽지만, 이중화(redundancy)는 결함허용을 구현하는 대표적인 방법 중 하나일 뿐입니다. 결함허용은 예비 부품이 있든 없든 상관없이 "고장이 발생했을 때 시스템이 어떻게 반응하도록 설계되었는가"를 뜻하는 더 넓은 개념이며, 오류를 감지하고 우회하는 소프트웨어적 기법 등으로도 달성할 수 있습니다.