오늘날 우리가 사용하는 온라인 협업 도구, 예를 들어 Google Docs와 같은 애플리케이션은 어떻게 실시간으로 여러 사용자가 동시에 문서를 편집할 수 있을까요? 그 비밀은 바로 분산 시스템에서 이벤트 순서를 처리하는 기술에 있습니다. 이번 포스트에서는 Lamport Clock과 Vector Clock이라는 두 가지 핵심 개념을 통해 이를 살펴보겠습니다.
단일 스레드에서의 간단한 이벤트 처리
단일 스레드로 동작하는 로컬 애플리케이션에서는 이벤트의 순서를 처리하는 것이 간단합니다. 예를 들어, Notepad에서 파일을 열고 편집을 시작하면 이벤트는 시간 순서대로 기록됩니다. 파일을 열었을 때는 타임스탬프가 0, 헤더를 추가했을 때는 1, 텍스트를 추가했을 때는 2로 기록됩니다. 이를 '논리적 시간'이라고 부르며, Lamport Clock의 기초적인 개념입니다.
Lamport Clock: 분산 환경에서의 시간 관리
온라인 문서를 3명의 사용자가 동시에 편집한다고 가정해봅시다. 이 경우, 각 사용자의 작업이 언제 발생했는지를 추적해야 문서의 버전을 정확히 관리할 수 있습니다. 이를 위해 Lamport Clock이 사용됩니다. Lamport Clock은 다음 규칙에 따라 작동합니다:
- 각 프로세스는 초기 카운터를 0으로 설정합니다.
- 작업을 수행할 때마다 카운터를 1씩 증가시킵니다.
- 다른 사용자로부터 메시지를 받을 경우, 로컬 카운터와 받은 카운터 중 더 큰 값을 취하고 1을 더합니다.
이 방식을 통해 분산 시스템에서도 작업 순서를 유지할 수 있습니다. 그러나 동시에 두 사용자가 동일한 작업을 수행할 경우, Lamport Clock만으로는 충돌을 완벽히 해결할 수 없다는 문제가 있습니다.
Vector Clock: 더 정교한 시간 관리
이를 해결하기 위해 Vector Clock이 도입됩니다. Vector Clock은 각 프로세스가 배열 형태의 카운터를 유지하며, 다음과 같은 규칙을 따릅니다:
- 초기 배열의 모든 값은 0으로 설정됩니다.
- 작업을 수행할 때, 자신의 카운터 값을 1 증가시킵니다.
- 메시지를 보낼 때, 자신의 카운터를 1 증가시키고 배열을 함께 보냅니다.
- 메시지를 받을 경우, 배열의 각 요소를 비교하여 더 큰 값을 취하고 자신의 카운터를 1 증가시킵니다.
이 방식을 통해 두 이벤트가 순차적으로 발생했는지, 동시에 발생했는지를 판단할 수 있습니다. 예를 들어, A 이벤트와 B 이벤트가 서로 독립적으로 발생했다면, 두 이벤트는 '동시성'으로 간주됩니다. 이 경우, Google Docs와 같은 시스템은 충돌을 해결하기 위해 두 사용자의 변경 사항을 모두 병합하거나 선택적으로 유지합니다.
결론
Lamport Clock과 Vector Clock은 분산 시스템에서 이벤트 순서를 관리하기 위한 필수적인 도구입니다. 물리적 시계는 각 시스템 간의 오차로 인해 신뢰하기 어렵기 때문에, 논리적 시계가 이를 대체하여 이벤트의 순서를 보다 정확히 추적합니다. 이러한 기술 덕분에 우리는 실시간 협업 도구를 원활하게 사용할 수 있는 것입니다.
다음 포스트에서는 분산 시스템과 관련된 또 다른 흥미로운 주제를 다룰 예정이니, 많은 기대 부탁드립니다!
'소개 > 소소한공부' 카테고리의 다른 글
2025년, 무료 환율 API의 주요 활용 사례 (4) | 2025.02.21 |
---|---|
Headless 브라우저를 활용한 웹 페이지 캡처 및 데이터 추출 (1) | 2025.02.11 |
백업 방법 복붙용 (1) | 2025.02.11 |
효과적인 소통 발표 공포를 극복하는 방법 (0) | 2025.02.07 |
내 키보드는 시끄럽다... (0) | 2025.02.05 |