[분산시스템특론] 2. 두 장군 이야기

2025. 10. 20. 21:42·CS/분산시스템특론
반응형

두 장군 이야기

어느 중세시대, 적의 부대 Z를 아군부대 A와 B가 동시에 공격하려고 한다.

이때 이 두 부대가 동시에 적의 부대를 공격해야만 이길 수 있으며, 두 부대 사이에는 적의 부대가 존재하기 때문에, 전령이 메세지를 전달하기 위해서는 적진을 은밀하게 뚫고 지나가야 한다고 해보자.

 

과연 A와 B는 동시에 Z를 공격하는 것이 가능할까?

 

우선 A와 B는 언제 동시에 공격할 지 먼저 공격 시간을 정해야 한다.

만약 현대같이 그냥 카톡같은 메신저가 있다면 A가 '10시에 공격하자' 라고 해도 B가 빠르게 이를 확인하여 서로 합의에 다다를 수 있을 것이다.

하지만 이 상황에서는 사람이 직접 적진을 뚫고 메세지를 전달해야 하기 때문에 전령이 중간에 잡혀서 죽으면 메세지가 유실될 수도 있다.

 

만약 전령이 메세지를 전달하는데 성공했다고 해보자.

과연 그때도 A와 B는 서로 안심하고 10시에 동시에 공격할 수 있을까?

안타깝게도 그럴 수는 없다.

전령을 보냈던 A 입장에서는 내가 보낸 메세지가 B에게 도착했는지, 중간에 유실되었는지 알 수 없다.

만약 중간에 유실되었는데 도착했을 것이라고 믿고 10시에 공격을 감행했다가 혼자 공격을 가게되면 패배할 것이다.

따라서 B가 메세지를 받으면, 메세지를 잘 받았다는 응답을 A에게 다시 보낼 필요가 있다.

 

하지만 그 응답 역시 중간에 적진을 뚫고 가다가 유실될 수도 있다.

따라서 설사 그 메세지가 A쪽으로 잘 도착했더라도, B 입장에서는 섣불리 공격을 감행할 수 없다.

왜냐하면 A가 B로부터의 응답을 성공적으로 받지 못했다면, A는 B로 메세지가 도착했다는 것을 확신할 수 없어 공격을 나갈 수 없기 때문이다.

결국 B가 다시 확신을 얻으려면 A는 자신이 메세지를 받았다는 응답을 B에게 보내주어야 한다.

 

이 응답이 성공적으로 도착하지 않으면 A는 B가 공격할 것임을 안심할 수 없기 때문에, 다시 이에 대한 응답을 추가로 받아야 하고, 이것이 연쇄적으로 계속 발생하기 때문에 이론상 이 둘 사이의 합의는 절대 일어날 수 없다.

 

다만 공학적으로는 둘 사이에 무한히 메세지를 주고받을 수는 없으므로, 약간의 유도리를 둬서 정해진 시간 안에 메세지를 받으면 상대방이 동의한 것으로 간주하고 통신을 연결하는 방법을 사용한다.

즉, 양쪽이 한번씩 응답을 받았으면 서로 동의한 것으로 간주하는 것이다. (3-way handshaking)

다만, 이는 어디까지나 '간주' 하는 것이기 때문에 '보장'은 할 수 없다.

 

네트워크에서는 내가 보낸 메세지가 상대방에게 반드시 도착할 것이라는 보장을 할 수 없다.

또한 내가 보낸 메세지가 상대방에게 성공적으로 도착한다면 적어도 어느 시간 안에는 반드시 도착한다는 것도 보장을 할 수 없다.

만약 이 둘 중 하나라도 보장할 수 있다면 그 사람은 노벨상을 탈 수 있다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > 분산시스템특론' 카테고리의 다른 글

[분산시스템특론] 6. 해밍 코드  (5) 2025.10.22
[분산시스템특론] 5. CAP 이론 & FLP 정리  (0) 2025.10.22
[분산시스템특론] 4. 시간 동기화 문제와 램포트 시계  (0) 2025.10.21
[분산시스템특론] 3. 2단계 커밋 프로토콜  (1) 2025.10.21
[분산시스템특론] 1. AI Agents vs. Agentic AI  (0) 2025.10.20
'CS/분산시스템특론' 카테고리의 다른 글
  • [분산시스템특론] 5. CAP 이론 & FLP 정리
  • [분산시스템특론] 4. 시간 동기화 문제와 램포트 시계
  • [분산시스템특론] 3. 2단계 커밋 프로토콜
  • [분산시스템특론] 1. AI Agents vs. Agentic AI
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615) N
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45) N
        • 생각 정리 (23) N
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[분산시스템특론] 2. 두 장군 이야기
상단으로

티스토리툴바