피드로 돌아가기
The Git Filesystem - Recreating the Content-Addressable Database
Dev.toDev.to
Infrastructure

Content-Addressable Storage 기반의 Git 불변 객체 저장소 설계 분석

The Git Filesystem - Recreating the Content-Addressable Database

Arnab Santra2026년 5월 23일14intermediate

Context

기존 VCS의 이력 추적 방식에서 벗어나 데이터 무결성과 효율적 저장 공간 확보를 위한 새로운 설계 필요성 대두. 파일 변경 이력을 단순 기록하는 대신 콘텐츠 기반의 주소 체계를 통해 데이터 중복을 근본적으로 제거하는 구조 지향.

Technical Solution

  • Blob, Tree, Commit, Tag의 4가지 정형화된 Object Type 정의를 통한 데이터 구조 단순화
  • SHA-1 해시값을 객체의 고유 식별자(Address)로 활용하는 Content-Addressable Filesystem 설계
  • [Type] [Size] [Null Byte] [Content] 순의 Wire Format 적용으로 일관된 바이너리 직렬화 구현
  • zlib 압축 및 2단계 디렉토리 구조(.git/objects/[first-2-hex]/...)를 통한 파일 시스템 I/O 병목 완화
  • Object Immutability 원칙을 적용하여 수정 시 기존 객체 변경 대신 신규 객체 생성 및 Reference 업데이트 방식 채택
  • Tree 객체가 파일명과 권한을 관리하고 Blob은 순수 내용만 저장하는 분리 구조를 통해 파일 이름 변경 비용의 제로화 달성

1. 대규모 데이터 저장소 설계 시 Content-Addressable Storage 도입을 통한 중복 제거 가능성 검토

2. 상태 변경 시 Update가 아닌 Append-only/Immutable 구조를 채택하여 데이터 복구 가능성(Reflog 유사 기능) 확보

3. 메타데이터(파일명, 권한)와 실제 데이터(Content)를 분리하여 저장하는 구조로 리네임 및 이동 연산 최적화

원문 읽기