분산 파일 시스템을 위한 CRDT 기반 계층 구조 관리

분산 파일 시스템을 위한 CRDT 기반 계층 구조 관리

초록

본 논문은 파일 시스템의 디렉터리 구조를 CRDT(Conflict‑Free Replicated Data Type)로 모델링하여, 각 클라이언트가 로컬 복제본에서 독립적으로 작업하고 최종적으로 모든 복제본이 동일한 파일 트리를 보장하도록 하는 방법을 제시한다. 충돌 해결을 자동화하고 사용자 개입을 최소화하기 위해 모듈식 설계와 연산 기반 병합 전략을 도입한다.

상세 분석

이 연구는 전통적인 파일 시스템이 중앙 서버에 의존하거나 강제적인 잠금을 사용해 일관성을 유지하는 방식에 한계가 있음을 지적한다. 특히 지연이 큰 WAN 환경이나 오프라인 작업이 빈번한 협업 시나리오에서는 낙관적 복제와 비동기 업데이트가 필수적이다. 저자는 이러한 요구를 충족시키기 위해 파일 시스템 트리를 CRDT 형태로 재구성한다. 핵심 아이디어는 디렉터리와 파일을 노드로 보는 유향 트리를 “집합‑집합” 구조로 분해하고, 각 노드에 대해 생성(Create), 삭제(Delete), 이동(Move), 이름 변경(Rename) 같은 원자 연산을 정의하는 것이다.

연산은 두 가지 메타데이터를 포함한다. 첫째는 전역적으로 유일한 식별자(ID)이며, 이는 Lamport 타임스탬프와 노드 고유 번호를 결합해 생성한다. 둘째는 연산의 인과 관계를 표현하는 벡터 클록 혹은 버전 벡터이다. 이러한 메타데이터를 통해 복제본 간에 전파된 연산들의 순서를 정확히 파악하고, “선행 연산이 아직 도착하지 않은 경우”에도 연산을 임시 보류하거나 “탐색 가능한 상태”로 변환한다.

충돌 상황은 크게 두 종류로 구분된다. 하나는 동일 노드에 대한 동시 삭제와 수정(예: 파일 내용 변경 vs. 파일 삭제)이며, 다른 하나는 구조적 충돌(예: 두 사용자가 서로 다른 부모 디렉터리로 같은 파일을 이동)이다. 저자는 삭제 연산에 “톰스톤(tombstone)”을 도입해 삭제된 노드를 논리적으로 유지함으로써, 이후 도착하는 이동이나 이름 변경 연산이 해당 노드와 연결될 경우 무시하거나 안전하게 병합하도록 설계했다. 구조적 충돌은 “최우선 규칙”과 “후순위 규칙”을 조합해 자동 해결한다. 최우선 규칙은 부모‑자식 관계의 위계성을 보존하도록 하며, 후순위 규칙은 연산의 타임스탬프를 비교해 최신 연산을 채택한다. 이 과정에서 사용자 개입 없이도 결정적이고 수렴 가능한 상태가 보장된다.

알고리즘의 수렴성 증명은 두 단계로 이루어진다. 첫째, 연산 집합이 부분 순서(partial order)를 형성하고, 모든 복제본이 동일한 부분 순서를 수용한다는 점을 보인다. 둘째, 병합 연산이 이 부분 순서 위에서 최소 상한(least upper bound)을 계산함을 증명한다. 따라서 어떤 순서로 연산이 도착하든 최종 상태는 동일한 최소 상한이 된다.

성능 측면에서 저자는 연산 전파 비용을 최소화하기 위해 “델타-CRDT” 방식을 적용한다. 즉, 전체 트리 대신 변화된 서브트리나 개별 연산만을 전송한다. 실험 결과, 수천 개의 파일과 수만 개의 연산을 포함하는 시뮬레이션에서 평균 레이턴시가 150 ms 이하이며, 네트워크 파티션이 발생해도 30 초 이내에 수렴한다는 것이 확인되었다.

이 논문의 주요 기여는 (1) 파일 시스템이라는 복합 구조를 CRDT로 일반화한 모델링, (2) 충돌 자동 해결을 위한 메타데이터 설계와 규칙 기반 병합 로직, (3) 실제 분산 환경에서의 구현 가능성을 입증한 프로토타입이다. 다만, 톰스톤 관리에 따른 메모리 증가와, 매우 깊은 디렉터리 트리에서 이동 연산의 복잡도 상승이 남은 과제로 지적된다. 향후 연구에서는 가비지 컬렉션 메커니즘과 트리 압축 기법을 도입해 이러한 한계를 보완할 수 있을 것으로 기대된다.