-
Git 프로젝트가 최근 공식적으로 대용량 파일 관리 문제를 직접 해결하기 시작함
-
Git LFS는 사용자에게 여러 가지 비용, 벤더 종속성 등을 유발하는 임시방편임
- 최근 partial clone 기능으로 Git 자체만으로 대부분의 LFS 역할을 대체할 수 있게 됨
- 앞으로는 large object promisor라는 새로운 솔루션도 공식 Git에 통합 준비 중임
- 이러한 변화로 대용량 파일 관리의 궁극적인 해법이 외부 확장이 아닌 Git 자체로 귀결될 전망임
Git의 대용량 파일 문제와 변화
만약 Git에 대적할 존재가 있다면, 그건 바로 대용량 파일 문제임
대용량 파일은 Git 저장소를 비대화시키고, git clone 속도를 저하시키며, 대다수 호스팅 환경에도 악영향을 줌
Git LFS의 등장과 한계
2015년 GitHub는 Git LFS를 출시해 대용량 파일 문제를 우회했음
하지만 Git LFS 자체가 새로운 복잡성과 저장 비용을 추가함
Git 커뮤니티는 조용히 대용량 파일 근본 문제를 고민해 왔고, 최근 Git의 공식 릴리즈에서 LFS 없이 대용량 파일을 관리할 새로운 방향성이 제시됨
오늘 당장 가능한 방법: Git LFS를 partial clone으로 대체
partial clone의 원리
-
Git LFS: 대용량 파일은 저장소 밖에 두고, 필요한 파일만 다운로드해 작업하는 구조임
-
Git partial clone(2017년 도입):
-
--filter 옵션으로 원하는 크기 이상의 blob을 제외하고 복제
- 필요할 때만 해당 대용량 파일만 서버에서 내려받음
Partial clone을 통해 미리 대용량 바이너리 파일을 모두 다운로드하지 않아도 됨
- Partial Clone Design Notes, git-scm.com
partial clone과 LFS의 공통점
-
체크아웃 용량 최소화: 최신 버전만 받고 전체 파일 히스토리는 생략함
-
빠른 복제: 대용량 파일 전송이 없으니 clone 속도가 빠름
-
빠른 세팅: shallow clone과 달리 프로젝트 전체 히스토리 접근 가능함
partial clone 활용 예시
대용량 PNG 파일의 히스토리가 많은 repo 복제 속도 및 디스크 차지 실례:
- 일반 clone시 거의 4분, 1.3GB 공간 차지
- partial clone 및 100KB blob 제한 적용시 6초 만에 복제, 49MB 차지
- 원본 대비 복제 속도 97% 개선, 체크아웃 크기 96% 축소
partial clone 한계
- 필터링한 데이터가 필요할 경우(예: git diff, git blame, git checkout), Git이 서버에 파일 요청함
- 이는 Git LFS와 동일한 특징임
- 실무에서는 바이너리 파일에 blame 할 일은 드묾
Git LFS의 문제점
-
높은 벤더 종속성: GitHub 구현체는 자체 서버만 지원, 요금 부과 및 종속성 초래
-
비용 문제: 50GB 저장시 GitHub LFS는 연 $40, Amazon S3는 $13
-
되돌리기 힘듦: 한번 LFS로 전환시, 히스토리 재작성 없이 원상복구 불가
-
지속적 세팅 비용: 모든 협업자가 LFS 설치 필수, 설치 안 하면 파일 대신 메타데이터 파일(혼란 유발)
앞으로의 전망: Large Object Promisor
대용량 파일은 호스팅 플랫폼(GitHub, GitLab)에서도 비용적 문제를 일으킴
Git LFS는 대용량 파일을 CDN으로 오프로딩하면서 서버 비용을 줄임
Large Object Promisor란?
올해 초, Git은 large object promisor라는 기능을 공식적으로 머지함
이 기능은 LFS와 유사하게 서버 쪽의 저장소 부하를 줄이지만, 사용자 복잡성은 크게 줄임
서버에서 바이너리로 압축된 대용량 blob 관리를 개선하는 기능임
Git LFS의 대안이 되는 솔루션임
– Large Object Promisors, git-scm.com
동작 원리
- 사용자가 대용량 파일을 Git 호스트에 push
- 호스트가 백엔드 promisor에 대용량 파일 오프로딩 처리
- clone시 Git 호스트가 클라이언트에 promisor 정보 제공
- 클라이언트는 필요시 해당 promisor에서 자동으로 대용량 파일 받음
현재 도입 현황과 과제
- 대용량 promisor는 아직 개발 중이며, 2025년 3월 일부 코드가 Git에 머지됨
- GitLab 등에서 추가 구현 및 미해결 이슈 논의 진행 중
- 대중적 도입까지는 아직 시간이 필요함
- 당분간은 대용량 파일 저장에 Git LFS 의존 불가피
- promisor가 보급되면 GitHub에도 100MB 넘는 파일 업로드가 가능해질 전망
결론: Git의 대용량 파일 미래는 Git
Git 프로젝트는 여러분을 대신해 대용량 파일 문제를 끊임없이 고민 중임
오늘은 여전히 LFS 의존이 남아있지만, 머지않아 대용량 파일을 Git만으로 손쉽게 관리할 수 있는 시대가 도래할 것임
미래에는 Git에 MP3 라이브러리를 넣겠다는 생각만이 대용량 활용을 가로막는 마지막 장애가 될 전망임