Zettelkasten

벡터 시계 (Vector Clock)는 이벤트의 인과관계를 추적해서 램포트 시계의 동시성 구별 한계를 해결한다.

·수정 2026.04.23·수정 1

요약

  • 분산 시스템에서 이벤트의 인과 관계를 추적하기 위한 논리적 시계
  • 램포트 시계의 한계(동시성 구별 불가)를 해결
  • 각 프로세스가 모든 프로세스에 대한 카운터 배열을 유지

램포트 시계 vs 벡터 시계

항목 램포트 시계 벡터 시계
구조 단일 정수 정수 배열 (n개 프로세스)
동시성 구별
인과관계 역추적
공간 복잡도 O(1) O(n)
메시지 오버헤드 낮음 높음

동작 원리

규칙

n개의 프로세스가 있을 때, 각 프로세스 i는 벡터 V[0..n-1] 유지

  1. 초기화: 모든 V[j] = 0
  2. 로컬 이벤트: V[i]++ (자기 자신 카운터 증가)
  3. 메시지 전송: 현재 벡터를 메시지에 포함
  4. 메시지 수신:
    • 각 요소별 max 취함: V[j] = max(V[j], V_received[j])
    • 자기 카운터 증가: V[i]++

예시

P0: [1,0,0] → [2,0,0] ────────────────→ [3,2,0]
                 ↘ send([2,0,0])              ↑ recv
P1: [0,1,0] → [2,2,0] → [2,3,0] ─────────────┘
                            ↘ send([2,3,0])
P2: [0,0,1] → [0,0,2] → [2,3,3]
                            ↑ recv([2,3,0])

인과관계 판단

두 벡터 V와 W에 대해:

조건 의미
V < W (모든 i에서 V[i] ≤ W[i], 하나 이상 <) V가 W보다 먼저 발생 (V → W)
V = W 같은 이벤트
`V

예시

V = [2,3,1]
W = [3,2,1]

V[0]=2 < W[0]=3, V[1]=3 > W[1]=2 → 비교 불가 → 동시 발생!

장점

장점 설명
동시성 감지 동시 발생 이벤트 구별 가능
인과관계 추적 a → b 관계 완전 추적 가능
충돌 감지 분산 DB에서 write 충돌 감지

단점

단점 설명
공간 오버헤드 O(n) - 프로세스 수에 비례
메시지 크기 증가 벡터 전체를 전송해야 함
확장성 제한 수천 노드 이상에서 비효율적

사용 사례

  • Amazon DynamoDB: 충돌 감지 및 버전 관리
  • Riak: 분산 key-value 저장소
  • 분산 디버깅: 이벤트 순서 추적

개선된 버전

  • Version Vector: 벡터 시계와 유사, 데이터 버전 관리용
  • Dotted Version Vector: 동시 업데이트 시 sibling 문제 해결
  • Interval Tree Clock: 동적 프로세스 추가/제거 지원

참고

램포트 시계 (Lamport Clock)는 분산시스템에서 이벤트 순서를 결정하기 위한 논리적 시계다. 인과적 브로드캐스트 (Causal Broadcast)는 메시지의 인과관계를 유지하는 브로드 캐스트 프로토콜이다. 전체 순서 브로드캐스트 (Total Order Broadcast)