ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION904 / 1500
분산 시스템난이도 중하5분 답변 목표 · 보강본

두 지역이 같은 문서를 독립적으로 수정했을 때 Lamport 시계와 벡터 시계는 무엇을 알 수 있고 무엇을 결정하지 못하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

Lamport 시계는 이벤트에 논리 번호를 붙여 인과관계가 뒤집히지 않게 합니다. A의 메시지를 받은 뒤 B가 발생하면 L(A) < L(B)입니다. 반대로 숫자가 작다고 원인이라는 역추론은 할 수 없습니다.

벡터와 동시성

두 참여자의 진행을 [a,b]로 두면 [1,0]과 [0,1]은 서로 포함하지 않아 동시 변경이고 [1,0]과 [1,1]은 앞의 변경을 반영한 후속입니다. 이를 벡터 시계(vector clock)의 포함 비교라고 부릅니다. 같은 문서의 동시 수정은 충돌 UI·병합으로 보낼 수 있지만 시계가 콘텐츠 병합을 자동 결정하지는 않습니다.

Lamport는 작은 숫자라 쉽지만 동시성 구분이 약하고 벡터는 참여자 수에 따라 커집니다. 동적 membership에서 항목을 너무 빨리 지우면 동시 변경을 선후로 오판할 수 있습니다. 단일 권위 저장소라면 키별 버전이 단순할 수 있습니다. HLC도 물리 시간과 논리 증가를 결합할 뿐 병합 규칙을 대신하지 않습니다. 지연·독립·인과적 수정과 membership 제거를 재현해 시계 판정과 콘텐츠 병합을 따로 검증합니다.

증가와 수신 규칙

Lamport 시계는 로컬 사건 때 카운터를 늘리고 메시지에 그 값을 실어 보냅니다. 수신자는 자신의 값과 받은 값 중 큰 값에 1을 더합니다. A가 5를 보냈고 B가 현재 8이라면 수신 사건은 9가 되어 송신보다 뒤에 놓입니다. 서로 통신하지 않은 사건도 우연히 5와 9를 가질 수 있으므로 L(A)<L(B)에서 A가 B의 원인이라고 역추론할 수 없습니다. 노드 ID를 보조 키로 붙이면 전체 정렬은 만들 수 있지만 그것이 실제 인과를 추가하는 것은 아닙니다.

벡터 시계는 참여자별 진행 값을 유지하고 수신 때 성분별 최댓값을 취한 뒤 자신의 성분을 증가시킵니다. V(A)의 모든 성분이 V(B) 이하이고 적어도 하나가 작으면 A가 B보다 인과적으로 앞선 것으로 판정할 수 있습니다. 어느 쪽도 성분별로 포함하지 않으면 동시 변경입니다. 이 보장은 사용하는 참여자 모델과 시계 갱신 규칙을 정확히 따른다는 전제 아래 성립합니다.

동시성 감지 뒤의 정책

문서 제목을 두 기기에서 각각 바꿨다면 동시임을 알아도 어느 제목이 옳은지 시계가 정하지 못합니다. 사용자에게 충돌을 보여 주거나 업무 규칙으로 병합하거나 명시적인 우선순위를 택해야 합니다. 장바구니처럼 집합 연산을 수렴하도록 정의할 수 있는 데이터에는 CRDT를 검토할 수 있지만 삭제와 재추가의 의미도 따로 설계해야 합니다.

참여자가 많고 자주 바뀌면 벡터 메타데이터가 커집니다. 노드 항목을 지우거나 ID를 재사용하면 과거 진행 정보를 잃어 인과 판정이 달라질 수 있어 안정성 조건과 축약 방법이 필요합니다. 단일 권위 저장소의 계정 갱신에는 단순 버전이 더 저렴할 수 있고, HLC는 물리 시간에 가까운 논리 표시가 필요할 때 검토합니다. 전역 최신성과 동시 변경 감지는 서로 다른 요구입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • Lamport의 보장과 역추론 불가를 말한다.
  • 벡터 포함 관계로 동시성을 보인다.
  • 시계와 콘텐츠 병합을 나눈다.
  • membership 비용을 설명한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • Lamport 대소가 인과라고 말한다.
  • 벡터가 콘텐츠를 자동 병합한다.
  • 메타데이터 비용을 무시한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기