Git을 오브젝트 스토리지에서 돌리려면 packfile을 다시 만들어야 한다

You can run Git on object storage if you re-make packfiles

Tigris Data가 오브젝트 스토리지 기반 Git 서버를 오픈소스로 개발하면서, 기존 packfile이 로컬 파일 시스템과 mmap을 전제로 설계돼 네트워크 왕복 지연에 취약하다는 문제를 발견했다. 리눅스 커널 저장소의 1,100만 개 오브젝트를 단일 packfile에서 HTTP Range 요청으로 꺼내려 해도 압축 크기를 알 수 없어 불가능했다. 이에 오브젝트 스토리지에 네이티브한 컬럼형 cue sheet 기반 packfile 포맷을 직접 고안해 프로덕션 규모 저장소에서 만족스러운 성능을 얻었다.

Git은 packfile을 mmap해서 커널이 디스크 내용을 메모리 페이지처럼 다루게 한다. 이는 디스크에서 직접 읽는 것보다 빠르지만, 이런 설계가 오브젝트 스토리지에서는 통하지 않는다는 게 아쉽다.

이 날의 다른 글

2026-09-19