Git 서브모듈을 패키지 매니저로 쓴다면? 11년째 해결 안 된 문제들

Git Submodules as a Package Manager

Git 서브모듈을 패키지 매니저로 쓴다면? 11년째 해결 안 된 문제들

Git 서브모듈은 패키지 매니저와 비슷한 점이 많지만, 해상도, 설치, 저장소, 업데이트, 보안, 추상화 측면에서 여러 가지 단점이 있다. 이 글은 git worktree와 서브모듈의 충돌, CVE 사례, 그리고 패키지 매니저가 이미 해결한 문제들을 서브모듈이 어떻게 해결하지 못하는지 분석한다. 예를 들어, 서브모듈은 정확한 커밋 SHA를 고정하지만 URL이 하드코딩되어 있어 저장소가 이동하면 깨지고, 공유 캐시가 없어 중복 저장되며, 보안 취약점이 반복적으로 발생했다. Rust 프로젝트의 사례와 최근 패치 제안도 소개한다.

서브모듈은 git의 내부 구조를 그대로 노출한다. 객체 ID가 핀으로, 업데이트 후 detached HEAD가 되고, $GIT_DIR/modules/ 레이아웃과 매니페스트의 전송 URL이 그대로 드러난다. 패키지 매니저는 이런 것들을 매니페스트 형식, 리졸버, 로컬 캐시 뒤로 숨기지만, 서브모듈은 날것 그대로 보여준다.

이 날의 다른 글

2026-09-05