결함허용 (Fault Tolerance)

컴퓨터과학·AI 공학
한 줄 정의: 시스템 일부 구성요소에 결함이나 고장이 발생해도 전체 시스템이 정상적인 기능을 계속 수행할 수 있는 능력입니다.

쉽게 풀면

사람은 신장(콩팥)을 두 개 가지고 있어서, 하나가 손상되더라도 나머지 하나가 기능을 이어받아 몸 전체는 큰 문제 없이 작동을 계속할 수 있습니다. 결함허용은 시스템을 이런 식으로 설계하는 것을 말합니다. 부품 하나가 고장 나더라도 시스템 전체가 갑자기 멈추거나 위험한 상태에 빠지지 않고, 성능이 다소 떨어지더라도 작동을 이어갈 수 있도록 미리 대비해두는 것입니다. 항공기가 엔진 하나를 잃어도 나머지 엔진으로 비행을 계속할 수 있게 설계되는 것도 같은 원리입니다.

왜 중요한가

결함허용은 분산시스템, 항공우주, 자율주행, 클라우드 인프라처럼 일부 구성요소의 고장이 곧바로 전체 서비스 중단이나 인명 피해로 이어질 수 있는 시스템 설계에서 핵심 요구사항으로 다루어집니다. 시스템 규모가 커지고 구성요소 수가 늘어날수록 어느 한 부품의 고장 확률은 오히려 높아지기 때문에, 신뢰성 있는 대규모 시스템을 설계하려는 연구에서는 결함허용 메커니즘을 어떻게 구현하고 검증하는지가 핵심 논의 대상이 됩니다.

논문에서는 이렇게 쓰입니다

"제안된 분산 제어 시스템은 센서 노드 중 최대 두 개가 동시에 고장 나더라도 전체 성능 저하 없이 결함허용 동작을 유지함을 실험적으로 확인하였다."

이 문장은 센서 몇 개가 갑자기 고장 나더라도, 전체 시스템은 성능 저하 없이 정상적으로 계속 작동했다는 사실을 실험을 통해 확인했다는 뜻입니다. 즉 개별 부품의 고장이 시스템 전체의 실패로 이어지지 않았다는 것을 보여준 것입니다.

"제안된 분산 합의 알고리즘은 전체 노드 중 3분의 1 미만이 임의로 동작하는 비잔틴 결함 상황에서도 시스템의 일관성을 유지함을 이론적으로 증명하였다."

분산시스템 및 블록체인 연구에서, 단순 고장뿐 아니라 악의적이거나 예측 불가능하게 동작하는 노드까지 포함한 더 어려운 조건에서도 결함허용을 보장함을 보일 때 쓰이는 문장이다.

조금 더 깊게 보면

결함허용을 구현하는 방법은 여러 층위로 나뉩니다. 하드웨어 이중화나 여분의 부품을 두는 방식 외에도, 여러 노드가 일치된 결과에 도달하도록 하는 합의(consensus) 알고리즘, 오류를 스스로 감지하고 복구하는 자가치유(self-healing) 기법, 일부 노드가 고의로 잘못된 값을 보내도 견디는 비잔틴 결함허용(Byzantine fault tolerance) 등이 대표적입니다. 논문에서 결함허용을 논할 때는 단순 정지 고장(fail-stop)만 가정하는지, 아니면 더 까다로운 비잔틴 결함까지 다루는지에 따라 요구되는 설계와 증명의 난이도가 크게 달라진다는 점을 함께 살펴볼 필요가 있습니다.

주의할 점

결함허용을 이중화와 같은 개념으로 혼동하기 쉽지만, 이중화(redundancy)는 결함허용을 구현하는 대표적인 방법 중 하나일 뿐입니다. 결함허용은 예비 부품이 있든 없든 상관없이 "고장이 발생했을 때 시스템이 어떻게 반응하도록 설계되었는가"를 뜻하는 더 넓은 개념이며, 오류를 감지하고 우회하는 소프트웨어적 기법 등으로도 달성할 수 있습니다.

관련 용어