웹3란 무엇인가
목차 / 제3부
제3부 · 쉽게 풀어낸 기술적 토대

10. 분산 시스템, 신뢰, 그리고 비잔틴 장군 문제

10장 · 9 분 분량 · 구독자

이 장은 웹3의 밑바닥에 놓인 가장 깊은 발상 하나를 펼쳐 놓는다. "탈중앙화"라는 단어의 의미 전부가 흘러나오는 원천이 바로 이 발상이다. 앞서 8장('비전공자를 위한 암호학')은 수학이 '한 사람'에게 무엇을 해 줄 수 있는지 보여 주었다. 자신이 누구인지 증명하고, 메시지가 변조되지 않았음을 증명하는 일이다. 그러나 웹3의 중심 야심은 그보다 크고, 그보다 기묘하다. 서로 알지도 믿지도 못하는 낯선 이들이 소유한, 세계 곳곳에 흩어져 있고, 몇몇은 고장 나 있으며 몇몇은 대놓고 부정직한 컴퓨터들의 '무리'가, 그럼에도 불구하고 "누가 어떤 돈을 소유하는가" 같은 단 하나의 공유된 진실에 합의하게 만드는 것 — 그것도 우두머리 없이, 본부 없이, 분쟁을 정리해 줄 심판 없이 해내는 것이다. 수십 년 동안 일급 컴퓨터과학자들은 이것을 '지극히 어려운 일'과 '증명 가능하게 불가능한 일' 사이 어디쯤으로 여겼다. 이것이 '왜' 그토록 어려운지 이해하는 일은, 블록체인(11장)과 비트코인(12장)이 이 역사를 아는 사람들에게 왜 한낱 과장이 아니라 진짜 돌파구로 받아들여졌는지 이해하기 위한 필수 전주곡이다.

이 장을 무료로 읽기

친구 3명이 구독하면 이 장이 여기서 열립니다.

쉽게 말해

지휘자 없는 오케스트라를 상상해 보라. 단원들은 서로를 볼 수 없고, 오직 손으로 쓴 쪽지를 줄줄이 옆으로 전달하는 방법으로만 소통할 수 있다. 그런데도 어떻게든 함께 시작하고, 함께 박자를 지키고, 함께 끝내야 한다. 분산 시스템이 바로 그 오케스트라이고, "연주되는 곡"은 컴퓨터들이 한 몸처럼 해내려는 과제다.

친구에게 편지를 보냈는데 답장이 없는 상황을 그려 보라. 편지가 배달 중에 사라졌나? 친구가 여행 중인가? 읽고도 답하지 않기로 했나? 세상을 떠났나? 침묵만으로는 아무것도 알 수 없다 — 그런데도 기다릴지, 다시 쓸지, 그 사람 없이 움직일지는 결정해야 한다. 분산 시스템 속의 모든 컴퓨터는 이 침묵의 안개 속에서 영구히 살아가며, 그 안에서 중대한 결정을 내려야 한다.

크래시 장애는 회의 도중 집에 가 버린 위원이다. 난처한 공석이지만, 적어도 상황은 분명하다. 비잔틴 장애는 자리에 남아 당신 면전에서 거짓말을 하고, 당신에게는 이 이야기를, 옆 사람에게는 정반대 이야기를 하며, 다른 두 사람과 조용히 결탁해 회의를 망가뜨리는 위원이다. 결석을 견디는 것도 어려운데, 계획적이고 조직적인 기만을 견디는 것은 그보다 훨씬 어렵다.

합의란, 쪽지만 주고받을 수 있고, 그 쪽지가 도착하는지도 확신할 수 없으며, 그중 몇몇은 거짓말을 하고 있을지 모르는 사람들로 가득한 방에서, 그럼에도 전원이 같은 결정에 합의한 채 — 그리고 남들도 합의했다는 확신을 품은 채 — 방을 걸어 나오게 만드는 문제다. 이 장의 나머지는 그것이 정확히 얼마나 어려운지, 그리고 넘을 수 없는 한계선이 어디에 그어져 있는지에 관한 이야기다.

장군은 컴퓨터이고, 전령은 네트워크이며, "공격이든 퇴각이든, 단 전원이 함께"는 합의에 대한 요구이고, 배신자는 거짓말하는 비잔틴 장애 기계다. 문제가 묻는 것은 이것이다. 정직한 참여자들은, 정체를 알 수 없는 일부가 전력을 다해 방해하고 있을 때조차, 언제나 공유된 결정에 도달할 수 있는가? 이 비유는 장식이 아니라 정밀하다 — 추상적인 문제가 곧 컴퓨터 엔지니어가 마주하는 구체적인 문제 그 자체다.

무리 안의 거짓말쟁이 한 명으로부터 안전하려면 셋으로는 부족하다 — 최소 넷이 필요하고, 그중 거짓말쟁이는 많아야 하나여야 한다. 거짓말이 이토록 부식성이 강한 것은, 거짓말쟁이가 사람마다 다른 이야기를 할 수 있어서 정직한 구성원들이 그냥 '표결'로 해결할 수 없기 때문이다. 거짓말쟁이는 방의 절반에는 이쪽에, 나머지 절반에는 저쪽에 투표했을지 모른다. 그것을 이기려면 정직한 참여자의 넉넉한 압도적 다수가 필요하다.

서명 없는 소문은 옮겨지는 동안 얼마든지 비틀린다 — "그 사람이 공격하라고 했다니까"는 반증할 길이 없다. 서명된 변조 방지 쪽지는 그럴 수 없다. 작성자의 위조 불가능한 표식을 지니고 있으므로, 거짓말쟁이는 더 이상 남이 하지 않은 말을 했다고 우길 수 없다. 디지털 서명은 미끌미끌한 전언을 검증 가능한 증거로 바꾸며, 이 한 가지 변화가 문제의 조임쇠를 극적으로 푼다. 다만 의존 관계에 주의하라. 이 보장은 서명이 정말로 위조될 수 없다는 가정 위에 서 있다 — 그리고 그것이 정확히 8장의 암호학이 하는 일이다.

카스트로와 리스코프는 이론으로 감탄만 받던 결과를 공학으로 바꿨다. 자기 소속 컴퓨터 일부가 시스템을 망치려 드는 동안에도 계속 작동하기 위해, 실제 시스템이 따라 할 수 있는 조리법을 내놓은 것이다. 다만 이들의 설계는 참여자가 '알려진, 고정된' 기계 목록이라고 가정했다. '전 세계 누구든' 허락 없이 마음대로 드나들게 하는 것은 또 한 번의 도약이었다 — 그리고 그 도약이 바로 훗날 비트코인이 해내는 일이다.

FLP가 말하는 바는 이렇다. 컴퓨터 무리가 '언제나' 합의에 도달한다는 절대적·수학적 보장을 요구하면서 네트워크 속도에 대해 아무 가정도 하지 않는다면, 그런 보장은 불가능하다 — 최악의 경우, 컴퓨터 한 대가 조용해지는 것만으로 결정이 영원히 지연될 수 있다. 이것은 분산 시스템 세계의 근본 속도 제한 같은 것이다. 머리가 모자라서 부딪히는 벽이 아니라, 문제 자체에 붙박여 있는 벽이다.

한 은행의 서울 지점과 부산 지점이 하나의 계좌 원장을 공유하며 전용 회선으로 동기화를 유지한다고 하자. 어느 날 그 회선이 끊긴다 — 네트워크 분할이다. 같은 계좌에서 돈을 찾으려는 고객이 두 지점에 각각 걸어 들어온다. 이제 두 지점은 피할 수 없는 선택 앞에 선다. 회선이 복구될 때까지 '모든 거래를 거절'하면 두 원장은 결코 어긋나지 않는다 — 가용성을 대가로 일관성을 고른 것이다(은행은 정확하지만 문을 닫았다). 아니면 마지막으로 알고 있던 잔액으로 '계속 고객을 응대'하면서 같은 돈이 두 번 지급될 위험을 감수할 수 있다 — 일관성을 대가로 가용성을 고른 것이다(은행은 열려 있지만 틀릴 수 있다). 회선이 끊겨 있는 동안 두 지점이 할 수 없는 일이 하나 있다. 완전히 문을 연 채로 동시에 완전히 정확할 수는 없다는 것이다. 그 불가능성이 CAP 정리다.

누군가에게 디지털 코인을 보내는 일은, 기본 설정대로라면, 동전을 건네주는 것보다 동전의 '사진'을 보내는 것에 가깝다 — 보내고 나서도 내 사본은 그대로 남으니, 다른 사람에게 또 "보낼" 수 있다. 돈은 그런 식으로는 작동할 수 없다. 디지털 현금 문제를 푼다는 것은 디지털 코인이 물리적 동전처럼 — 오직 한 번만 쓸 수 있게 — 행동하도록 만들 방법을 찾는 일이다.

풀리지 않은 문제는 "이 코인이 내 것임을 어떻게 증명하나?"가 아니었다 — 그것은 서명이 해결했다. 문제는 "서로 믿지 않고, 우두머리도 회원 명부도 없는 수천 명의 낯선 이들이, 같은 코인이 두 번 쓰이지 못하도록 누가 누구에게 지불했는지의 단 하나의 참된 순서에 어떻게 전원 합의하는가?"였다. 이것은 서로 믿지 못하는 이들 사이의 합의 문제 — 돈이라는 옷을 입은 비잔틴 장군 문제다.

이 장에서 다루는 내용

  1. 분산 시스템이란 무엇인가
  2. 분산 시스템은 왜 어려운가
  3. 두 종류의 고장: 정직한 정지와 능동적인 거짓말
  4. 서로 믿지 못하는 이들 사이의 합의라는 문제
  5. 비잔틴 장군 문제
  6. 비잔틴 장애 허용, 실용이 되다
  7. 넘을 수 없는 한계: FLP 불가능성 결과
  8. CAP 정리: 모든 것을 가질 수는 없다
  9. 이전의 디지털 화폐는 왜 실패했는가: 이중지불 문제
  10. 종합

이 장에서 설명하는 용어

전체 내용은 책에 실려 있습니다.

전체 책 구매