분산 합의 (Distributed Consensus)
분산 합의는 중앙 관리 기관 없이 네트워크의 여러 컴퓨터(노드)가 함께 작동하여 하나의 값이나 기록 순서에 대한 공통 합의에 도달하는 개념입니다. 일부 노드가 멈추거나 메시지가 늦게 도착하거나, 심지어 일부 노드가 의도적으로 거짓 정보를 보내더라도 정상 노드들이 같은 결과에 동의하도록 하는 것이 목표입니다.
분산 합의가 해결하는 문제
합의 프로토콜은 보통 다음 성질을 만족해야 합니다.
- 합의(일치): 정상 노드는 모두 같은 값을 결정합니다.
- 타당성: 결정된 값은 어떤 노드가 실제로 제안한 값이어야 합니다.
- 종료(활성): 정상 노드는 결국 결정을 내립니다.
앞의 두 성질은 안전성(잘못된 결과가 나오지 않음), 마지막 성질은 활성(진행이 멈추지 않음)에 해당합니다. 완전히 비동기적인 네트워크에서는 노드 하나만 멈출 수 있어도 항상 종료를 보장하는 결정론적 합의 프로토콜이 존재하지 않는다는 결과(FLP 불가능성 정리)가 알려져 있어, 실제 프로토콜은 시간 가정이나 무작위성을 추가로 사용합니다.
장애의 종류와 내결함성
- 충돌 장애(crash fault): 노드가 멈추기만 하고 거짓말은 하지 않는 경우입니다. Paxos, Raft 같은 프로토콜이 이를 견디며, f개의 장애를 견디려면 보통 2f+1개 이상의 노드가 필요합니다.
- 비잔틴 장애(Byzantine fault): 노드가 임의로 잘못 동작하거나 악의적으로 서로 다른 메시지를 보내는 경우입니다. PBFT 같은 비잔틴 장애 허용(BFT) 프로토콜은 f개의 악의적 노드를 견디기 위해 3f+1개 이상의 노드가 필요합니다.
분산 원장 기술(DLT)과 블록체인에서의 분산 합의
DLT 솔루션은 모든 분산 원장이 트랜잭션 기록 방식과 순서에 동의해야 하는 합의 메커니즘 위에 구축됩니다. 합의 메커니즘은 모든 노드를 하나로 묶어 단일 데이터 세트에 대한 동의를 이끌어내는 블록체인 네트워크 내 프로토콜이며, 각 블록체인 트랜잭션을 승인하는 검증 기준 역할을 합니다. 이러한 검증은 권한이 한 개인에게 집중되지 않게 합니다. 누구나 참여할 수 있는 블록체인은 노드 수를 미리 알 수 없으므로, 가짜 노드를 대량으로 만드는 공격을 막기 위해 계산 능력이나 예치한 자산을 기준으로 합의에 참여하게 합니다.
- 작업 증명(PoW): 비트코인이 사용하는 방식으로, 가장 많은 작업이 누적된 체인을 따릅니다. 블록이 쌓일수록 기록이 뒤집힐 가능성이 줄어드는 확률적 확정성을 가집니다.
- 지분 증명(PoS): 이더리움 등이 사용하며, 자산을 예치한 검증자가 블록을 제안하고 투표합니다.
- BFT 계열: Tendermint처럼 검증자 투표로 블록을 즉시 확정하는 방식도 있습니다.
분산 합의는 어디에 사용되나요?
- 분산 데이터베이스: 분산 합의 프로토콜은 분산 데이터베이스의 여러 복제본 간 일관성을 유지하는 데 사용됩니다.
- 설정 관리와 리더 선출: 클러스터에서 어느 노드가 주 노드인지, 현재 설정이 무엇인지에 모든 노드가 동의하도록 합니다.
- 블록체인: 이중 지출을 막고 모든 노드가 같은 거래 기록을 유지하도록 합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.