[GIT] git 서브모듈(submodule) 이란 무엇일까
[ 목 차 ]
1. GIT 서브모듈이란
2. GIT 서브모듈의 활용
3. GIT 서브모듈 사용하는 방법
GIT 서브모듈 SUBMODULE 이란
깃에서 서브 모듈이란 하나의 프로젝트 안에 여러 개의 모듈이 구성되어 있을 때 개별 모듈을 각각 깃 레포지토리로 이력관리를 하고자 할 때 사용할 수 있는 기능입니다. 모듈별로 저장소의 소스를 관리하기 때문에 다른 모듈의 변경 사항과 구분하여 프로젝트의 커밋 이력을 관리할 수 있습니다.
GIT 서브모듈 SUBMODULE 의 활용
소스별로 깃 레포지토리를 분리하는 것은 프로젝트 내의 복잡성을 높일 뿐만 아니라 기존 의존성 관리 프레임워크(maven, gradle, ....)를 사용하는 경우에는 모듈에 대한 의존성을 추가하면 되기 때문에 반드시 서브모듈 기능을 사용해 모듈의 레포지토리를 분리할 필요성이 있는지 의문이 들 수 있습니다.
하지만 깃을 사용하는 최대 장점은 버전관리이며, 서브모듈을 이용한 레포지토리의 관리는 해당 레포지토리를 참조하는 부모 레포지토리에 버전별로 모듈을 제공할 수 있다는 점이라고 생각합니다. 만약 A와 B라는 프로젝트에서 M이라는 모듈을 사용하고 있을 때, A 는 M-1 버전을, B 는 M-2 버전을 사용함으로써 두 프로젝트는 M의 코어는 공유하면서 커스텀화된 모듈을 사용할 수 있게 됩니다.
간단히 예를 들어, 웹 개발을 하면서 여러 사이트에 웹 솔루션을 만들면서 디자인이나 사진 등의 리소스만 해당 사이트에 맞게 커스텀화해서 배포한다고 할 때, 해당 웹 프론트 사이드를 독립적인 서브모듈로 분리하여 해당 사이트별로 커스텀된 버전을 제공할 수 있습니다. 이렇게 활용하는 경우에는 대부분의 프론트 소스를 공유함으로써 소스를 더 편리하게 관리할 수 있습니다.
물론, 이 방법 외에도 여러 방식으로 깃이 제공하는 서브모듈 기능을 활용할 수 있을 것입니다.
GIT 서브모듈 SUBMODULE 사용하는 방법
깃 서브모듈을 추가하기 위해서는 서브모듈을 추가하고자 하는 저장소 안에서 아래 명령어를 통해 서브모듈 폴더를 추가합니다.
git submodule add <submodule_git_url> <submodule_folder>
이때 submodule_git_url은 생성한 깃 서브모듈 레포지토리의 주소이고, submodule_folder는 서브모듈 레포지토리를 넣을 폴더 입니다. 해당 폴더명을 넣지 않으면 서브모듈은 호출한 폴더에 생성되기 때문에 주의해야 합니다.
정상적으로 서브모듈이 추가되면 .gitmodules 폴더가 저장소 내에 생성됩니다. 생성된 서브모듈은 아래 명령어를 통해 상태를 갱신하여 가져옵니다.
git submodule update --remote --recursive
위 명령어에서 remote는 원격 서브모듈 레포지토리에서 pull을 한다는 의미이고, recursive는 서브모듈이 여러 개일 경우 일괄로 git submodule update 명령을 적용함을 의미합니다.