티스토리 뷰
728x90
Git에서 Subtree와 Submodule을 동시에 사용하는 하이브리드 운영 방법은 주로 다음과 같은 상황에서 효과적입니다.
- Submodule: 독립적이며 자주 업데이트되는 외부 의존성 관리 (예: 공통 라이브러리, 프레임워크 등)
- Subtree: 덜 빈번하게 업데이트되거나 주 레포의 일부처럼 취급하고 싶은 프로젝트의 하위 요소 (예: 내부 모듈, 특정한 기능 세트 등)
이를 혼합한 하이브리드 운영 방법의 효과적인 전략은 다음과 같습니다.
📌 Submodule과 Subtree의 특징 및 활용 목적 비교
구분 | Submodule | Subtree |
형태 | 독립된 별도의 레포지토리로 관리 | 주 레포지토리의 하위 폴더로 통합 관리 |
커밋 기록 | 별도 관리 (하위 모듈 내에서 별도 기록) | 주 레포지토리에 통합된 형태로 단일 기록 |
업데이트 | 주기적으로 자주 업데이트 (수시로 Pull) | 상대적으로 드물게 업데이트 (주기적 Merge) |
의존성 | 느슨한 연결, 분리된 라이브러리 등에 적합 | 밀접하게 연관된 내부 컴포넌트에 적합 |
복잡성 | 복잡한 관리, 초보자에게 어려울 수 있음 | 상대적으로 간단한 관리, 사용하기 쉬움 |
✅ 하이브리드 운영 방식 시나리오 및 구성 예시
예를 들어, 아래와 같은 구조로 하이브리드를 구성할 수 있습니다.
Main-Repo/
├── common-lib/ [Submodule] (자주 업데이트되는 라이브러리)
├── frontend/
│ ├── web-ui/ [Subtree] (가끔씩 통합, 별도의 Front-end 레포 존재)
│ └── mobile-app/ [Subtree] (별도 관리되는 앱 모듈)
└── backend/
└── auth-service/ [Subtree] (내부 서비스, 낮은 빈도의 동기화)
- common-lib 는 Submodule로 등록하여 자주 업데이트하는 외부 공유 라이브러리를 독립적으로 관리합니다.
- frontend/web-ui 및 backend/auth-service 등 내부 서비스와 같이 상대적으로 드물게 업데이트되고 메인 레포지토리의 일부로 관리하는 것이 더 자연스러운 모듈들은 Subtree로 관리합니다.
🚀 하이브리드 구성 실습 예시
1️⃣ Submodule 추가 및 관리법
# Submodule 추가
git submodule add https://gitlab.com/your-org/common-lib.git common-lib
# Submodule 업데이트
git submodule update --remote --merge
Submodule은 별도 관리이며, 최신 커밋 참조만 메인 레포에서 유지합니다.
2️⃣ Subtree 추가 및 관리법
# Subtree 추가 (frontend 웹 UI 추가 예)
git subtree add --prefix=frontend/web-ui https://gitlab.com/your-org/web-ui.git main --squash
# Subtree 최신 변경 사항 가져오기
git subtree pull --prefix=frontend/web-ui https://gitlab.com/your-org/web-ui.git main --squash
# Subtree로 변경사항 푸시하기 (양방향 관리 시)
git subtree push --prefix=frontend/web-ui https://gitlab.com/your-org/web-ui.git main
Subtree는 주 레포지토리의 히스토리에 통합되어 있으며, 필요 시 통합 또는 동기화만 수행합니다.
🎯 하이브리드 운영 시 권장 전략
- Submodule 활용 전략
- 자주 변경되는 공통 라이브러리
- 별도의 개발팀이 독립적으로 관리하는 모듈
- CI/CD 단계에서 별도의 빌드 프로세스와 독립적으로 관리
- Subtree 활용 전략
- 통합된 코드베이스처럼 취급하는 서비스 또는 프로젝트
- 히스토리를 간단하게 유지하고자 하는 모듈
- Pull 빈도가 낮은 모듈로, 메인 레포의 일부처럼 취급되는 컴포넌트
⚠️ 주의할 점과 Best Practice
- Submodule과 Subtree를 함께 쓰면 레포지토리 구조가 복잡해질 수 있으므로, 팀 구성원에게 명확한 가이드라인 제공이 필수입니다.
- Submodule과 Subtree 사용을 위한 GitLab/Jenkins 등의 CI/CD 설정도 따로 명확하게 구분하여 관리해야 합니다.
- 문서화 및 커밋 규칙을 명확히 하여 다른 팀원들이 혼란 없이 사용하도록 합니다.
위의 가이드를 따라 구성하면 Subtree와 Submodule의 장점을 모두 살리면서 Git 운영 방식을 효율적으로 개선할 수 있습니다.
728x90
'CI_CD' 카테고리의 다른 글
Jenkins를 활용하여 MSA 환경에서 Git Submodule과 Git Subtree 빌드 예시 (0) | 2025.03.20 |
---|---|
MSA(Microservices Architecture) 환경에서 Git Submodule과 Git Subtree를 혼합한 하이브리드 방식 (0) | 2025.03.20 |
실무에서 유용한 Git Subtree 활용 팁 7가지 (0) | 2025.03.20 |
Git Subtree란? (0) | 2025.03.20 |
Sparse Checkout이란? (0) | 2025.03.20 |