분산 합의 알고리즘의 핵심적인 단점은 다중 통신 홉으로 인한 네트워크 지연 시간의 급증과 리더 선출 단계에서의 가용성 저하입니다. Raft와 같은 알고리즘은 강력한 안전성을 제공하지만, 이는 종종 불필요한 복잡성을 초래하는 오버엔지니어링의 원인이 되기도 하죠. 대부분의 비즈니스 도메인에서는 성능과 신뢰성의 균형을 위해 최종 일관성이나 CRDT와 같은 실용적인 대안을 고려하는 것이 훨씬 더 지혜로운 선택이 될 수 있습니다.
신뢰할 수 없는 수많은 노드가 마치 하나의 거대한 유기체처럼 움직이게 만드는 마법, 우리는 그것을 분산 합의라 부릅니다. 하지만 이 마법 같은 기술의 이면에는 엔지니어들이 감내해야 할 가혹한 대가와 복잡성의 늪이 숨어 있다는 사실을 간과하기 쉽습니다. 현대 분산 시스템의 근간을 이루는 이 기술이 걸어온 길을 되짚어보며, 우리가 왜 완벽한 합의라는 환상에서 벗어나 실용적인 타협을 고민해야 하는지 깊이 있게 살펴보고자 해요.

1. 신뢰할 수 없는 세계에서의 진실 찾기: 분산 합의의 역사적 궤적
1.1 Paxos의 유산: 수학적 완벽함과 구현의 악몽 사이에서
1989년 레슬리 램포트(Leslie Lamport)가 제안한 Paxos 알고리즘은 분산 합의라는 거대한 학문적 토대를 세운 기념비적 업적입니다. Paxos는 수학적으로는 흠잡을 데 없는 완벽함을 자랑했지만, 역설적으로 그 난해함 때문에 실제 엔지니어들이 시스템으로 구현하기에는 거의 재앙에 가까운 난이도를 선사했죠. 램포트 자신조차 ‘Paxos Made Simple’이라는 논문을 통해 다시 설명하려 했으나, 여전히 이론과 실제 사이의 거대한 간극은 메워지지 않았습니다.
이러한 복잡성은 시스템의 경직성으로 이어졌고, 작은 네트워크 변화에도 전체 합의가 흔들리는 불안정성을 초래하곤 했어요. 수학적인 진실이 곧 운영상의 안정성을 보장하지 않는다는 사실을 우리는 Paxos의 시대를 지나며 뼈저리게 깨닫게 된 셈이죠.
1.2 이론에서 프로덕션으로: Raft와 ZAB가 바꾼 클라우드 지형도
Paxos의 악명 높은 복잡성에 대한 대안으로 등장한 Raft는 합의의 과정을 리더 선출과 로그 복제라는 직관적인 단계로 분절하며 큰 혁신을 가져왔습니다. etcd나 Consul 같은 현대 인프라의 핵심 도구들이 Raft를 채택하면서 분산 합의는 비로소 ‘사용 가능한’ 기술로 자리 잡게 되었죠. 하지만 Raft 역시 리더라는 단일 실패 지점에 의존하는 구조적 한계에서 완전히 자유로울 수는 없었습니다.
리더 중심의 구조는 구현의 편의성을 제공했지만, 반대로 리더에게 과도한 부하가 집중되거나 리더 선출 과정에서 시스템 전체가 마비되는 ‘합의세(Consensus Tax)‘를 징수하기 시작했어요. 우리는 더 쉬운 합의를 얻은 대신, 성능이라는 또 다른 자원을 희생해야 하는 트레이드오프의 영역에 들어서게 된 것이랍니다.
2. 합의가 부채가 될 때: 성능과 복잡성의 임계점
2.1 합의 알고리즘 vs 성능: 우리가 지불하는 ‘합의세’의 실체
모든 분산 합의 기반의 쓰기 작업은 네트워크를 가로지르는 여러 차례의 왕복(Round-trip) 통신을 전제로 합니다. 이는 분산 시스템의 본질적인 목표인 확장성과 정면으로 충돌하는 병목 현상을 만들어내곤 하죠. 데이터를 저장하기 위해 과반수의 승인을 기다리는 그 짧은 찰나의 시간들이 쌓여 전체 시스템의 지연 시간(Latency)을 걷잡을 수 없이 키우게 됩니다.
‘수학적으로 증명된 합의 알고리즘과 실제 운영 환경의 구현체 사이에는 숨겨진 경쟁 상태(Race Conditions)와 운영상의 악몽이라는 거대한 간극이 존재합니다.’
이러한 지연 시간은 단순히 속도의 문제를 넘어 시스템의 반응성을 저해하고, 고부하 환경에서는 연쇄적인 장애의 원인이 되기도 해요. 우리가 무심코 선택한 ‘강력한 일관성’이라는 목표가 실제로는 서비스의 숨통을 조이는 족쇄가 될 수도 있다는 뜻입니다.
2.2 오버엔지니어링의 덫: 당신의 데이터에 정말로 Raft가 필요한가요?
많은 엔지니어가 최신 기술에 매료되어 데이터의 특성을 고려하지 않은 채 Raft나 Paxos를 도입하곤 합니다. 하지만 소셜 미디어의 ‘좋아요’ 수나 캐시 데이터처럼 굳이 찰나의 일관성이 중요하지 않은 영역에서까지 이러한 무거운 알고리즘을 사용하는 것은 전형적인 오버엔지니어링의 사례라고 할 수 있어요.

데이터의 정합성보다 가용성이 훨씬 중요한 비즈니스 모델에서는 오히려 최종 일관성이나 CRDT 같은 모델이 훨씬 강력한 무기가 됩니다. 아래의 비교표를 통해 우리가 어떤 타협점을 찾아야 하는지 명확히 확인할 수 있습니다.
Comparative Analysis of Consensus and Alternative Models
| Feature | Paxos (Classical) | Raft (Leader-Based) | CRDTs (Alternative) | Eventual Consistency |
|---|---|---|---|---|
| Latency | Very High (Multiple Rounds) | High (Leader Hops) | Low (Local Writes) | Very Low |
| Complexity | Extreme (Hard to implement) | Moderate | Low to Moderate | Low |
| Availability | Medium (Quorum-dependent) | Low (Leader Failure) | High (Always Writeable) | Very High |
| Use Case | Academic/Foundational | Metadata (etcd, Consul) | Collaborative Apps | Social Media/Caches |
3. 운영의 벤치마크: 이론적 한계와 현실의 충돌
3.1 학문적 한계: FLP 불가능성 원리와 CAP 정리
우리가 분산 합의를 다룰 때 반드시 마주하게 되는 벽이 있습니다. 그것은 바로 비동기 시스템에서 단 하나의 노드만 고장 나도 합의가 불가능할 수 있다는 ‘FLP 불가능성 원리’입니다. 이는 기술의 부족이 아닌 물리학적 한계에 가깝습니다. 또한 CAP 정리 역시 우리에게 냉혹한 선택을 강요합니다.
- 1985 FLP Impossibility: Fischer, Lynch, Paterson에 의해 증명되었으며, 노드 결함이 발생할 수 있는 비동기 시스템에서는 그 어떤 합의 알고리즘도 유한한 시간 내에 합의를 마칠 수 없음을 보여줍니다.
- CAP Theorem Impact (2000): 에릭 브루어의 정리는 네트워크 파티션(P) 상황에서 일관성(C)과 가용성(A) 중 하나를 반드시 포기해야 함을 명시합니다. Raft와 Paxos는 가용성을 희생하고 일관성을 선택한 모델이죠.
- The 51% Attack & Latency: 5개 노드로 구성된 Raft 클러스터에서 쓰기 한 번을 위해 최소 2회의 네트워크 홉과 과반수(3개 노드)의 승인이 필요하며, 이는 일반적인 쓰기 대비 지연 시간을 300% 이상 증가시킵니다.
- Real-world Failure: 수많은 클라우드 장애가 합의 모듈의 ‘리더 플래핑(Leader Flapping)‘에서 비롯됩니다. 네트워크 미세 진동으로 리더가 끊임없이 바뀌면 시스템은 건강한 노드들로 구성되어 있어도 사실상 오프라인 상태가 됩니다.
3.2 현실의 경고: 리더 플래핑과 시스템 마비
‘우리는 모든 쓰기 작업에 대해 “합의세”를 지불하고 있습니다. 종종 Paxos나 Raft가 제공하는 절대적인 동기화가 전혀 필요하지 않은 데이터에 대해서도 말이죠.’
현장에서 마주하는 가장 끔찍한 시나리오는 네트워크 지연이 발생했을 때 Raft 클러스터가 리더를 선출하지 못하고 무한 루프에 빠지는 경우입니다. 모든 노드가 정상임에도 불구하고 ‘합의’를 이루지 못해 전체 서비스가 중단되는 이 역설적인 상황은, 기술적 완벽함이 운영의 유연성을 어떻게 파괴할 수 있는지를 극명하게 보여줍니다.
결국 뛰어난 아키텍처란 가장 복잡한 알고리즘을 사용하는 것이 아니라, 비즈니스의 가치에 따라 일관성의 강도를 조절할 줄 아는 안목에서 탄생합니다. 무조건적인 합의의 추구보다는, 우리 서비스에 정말 필요한 것이 ‘절대적 진실’인지 아니면 ‘납득할 만한 지연’인지 냉정하게 판단해야 할 때입니다.
분산 시스템을 설계할 때 우리가 던져야 할 질문은 “어떤 합의 알고리즘을 쓸 것인가?”가 아니라 “합의를 포기함으로써 얻을 수 있는 이득이 무엇인가?”가 되어야 해요. 그것이 바로 오버엔지니어링의 늪에서 벗어나 지속 가능한 시스템을 만드는 첫걸음이 될 것입니다.