Zettelkasten

램포트 시계 (Lamport Clock)는 분산시스템에서 이벤트 순서를 결정하기 위한 논리적 시계다.

·수정 2026.04.24·수정 2

요약

  • 분산 시스템에서 이벤트의 순서를 결정하기 위한 논리적 시계
  • Leslie Lamport가 1978년 제안
  • 물리적 시간 동기화 없이 이벤트 순서 추적 가능

왜 필요한가?

  • 분산 시스템의 각 노드는 독립적인 물리적 시계를 가짐
  • 노드 간 시간 동기화가 어려움 (네트워크 지연, 클럭 드리프트)
  • 이벤트 발생 순서를 정확히 파악해야 함

동작 원리

규칙

  1. 초기화: 각 프로세스의 카운터를 0으로 초기화
  2. 이벤트 발생: 카운터를 1 증가
  3. 메시지 전송: 현재 카운터 값을 메시지에 포함
  4. 메시지 수신: max(내 카운터, 받은 카운터) + 1로 업데이트

예시

Process A: [1] → [2] ────────────→ [5]
                  ↘ send(2)
Process B:        [1] → [3] (max(1,2)+1) → [4]

Happens-Before 관계

  • a → b: 이벤트 a가 b보다 먼저 발생
  • C(a) < C(b)이면 a가 b보다 먼저 발생했을 가능성이 있음
  • 단, 역은 성립하지 않음 (동시 발생 이벤트 구별 불가)

한계

한계 설명
동시성 구별 불가 C(a) = C(b)여도 실제 동시 발생인지 알 수 없음
인과관계 역추적 불가 C(a) < C(b)라고 해서 a → b라고 단정 불가

개선된 방법

  • 벡터 시계 (Vector Clock): 각 프로세스별 카운터 배열 유지
  • 동시 발생 이벤트 구별 가능
  • 인과관계 완전 추적 가능

참고

벡터 시계 (Vector Clock)는 이벤트의 인과관계를 추적해서 램포트 시계의 동시성 구별 한계를 해결한다. 비잔틴 장군 문제는 악의적인 노드가 포함됐을 때를 가정한 분산 합의 문제 두 장군 문제 linearizable DB