-
bundle-uri
는 Git의 새 기능으로, 캐시된 파일을 다운로드해 프로젝트 데이터를 미리 채운 후 서버와의 복잡한 페치 과정을 줄임
- 일반적으로
git clone
명령어는 서버와 협상 과정을 거쳐 필요한 데이터를 다운로드함 → 비효율적일 수 있음
-
bundle-uri
는 CDN에서 캐시된 초기 데이터를 받아오고, 이후 서버에서 최신 상태만 업데이트하도록 함 → 시간 단축 가능
클론 속도가 빨라지는가?
Yes? - 빠를 수 있다
- 로컬 파일 옵션을 사용하면 클론 속도가 매우 빨라짐
- VM에서 마운트된 파일 시스템이나 클라우드 캐시에서 번들 파일을 사용하면 더 빠르게 동기화 가능
No? - 더 느릴 수 있다
- 동일한 데이터를 CDN에서 받아오면 빠를 것 같았으나, 오히려 더 느렸음
- 실험 결과: 번들을 사용한 클론이 일반 클론보다 더 느림
- 일반 클론: 2분 36초
- 번들 사용 클론: 3분 20초
- 번들에서 이미 받은 객체가 다시 다운로드되는 문제가 발생함
Maybe? - 그럴 수도 있다
- Git이 번들 파일에서
refs/heads
(브랜치 참조)만 읽어서 문제가 발생
- 나머지 참조는 무시되기 때문에 서버에서 추가로 데이터를 다운로드하게 됨
- Git 코드를 수정해 모든 참조를 복사하도록 하면 클론 속도가 개선됨
- 수정 후 클론 시간: 2분 19초 (기존 2분 36초보다 빨라짐)
- 추가로 다운로드한 객체 수: 43,877개 (전체의 약 1%)
수정 방법 및 패치 적용
- Git의
bundle-uri.c
코드에서 refs/heads
외의 참조를 무시하는 부분을 수정
- 수정 후 모든 참조를 복사하도록 변경 → 클론 속도 개선
- 이 수정은 6글자 변경으로 이루어진 최소한의 패치였음
이 기능을 사용해야 할까?
possibly - 아마 도움 될수도
- GitHub, GitLab 같은 플랫폼에서는 서버 CPU 부담을 줄일 수 있는 큰 장점이 있음
- 서버에서 직접 packfile을 계산하지 않고 CDN에서 처리 가능 → 서버 자원 절약
- 개인 사용자도 유용할 수 있는 경우:
- 사내 Git 서버에서 대규모 클론을 반복해야 하는 경우
- CI/CD 시스템에서 반복적인 전체 클론 작업이 필요한 경우
현실적으로 강제될 가능성이 높음
- 최신 Git 프로토콜에서는 서버가 클라이언트에 번들 URL을 제공 가능
- 서버가 번들 파일 URL을 제공하면 클라이언트가 자동으로 다운로드 후 동기화 진행
- GitHub 등에서 이 기능이 활성화되면 사용자가 선택할 여지가 없음
결론
- 번들 파일을 사용하면 클론 속도가 더 빠를 수 있지만, Git의 처리 방식 때문에 초기에는 오히려 느려질 수 있음
- Git의 코드를 수정해 참조 처리 방식을 개선하면 클론 속도가 향상됨
- 앞으로 GitHub, GitLab 등에서 이 기능을 도입하면 클라이언트에서 자동으로 사용하게 될 가능성이 큼