Git에서 Subtree와 Submodule을 동시에 사용하는 하이브리드 운영 방법

26 sec read

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 운영 방식을 효율적으로 개선할 수 있습니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 4가지 방식 장단점…

쿠버네티스에서 애플리케이션을 운영할 때, DB 접속 정보나 API 키 같은 민감한 정보, 즉 ‘시크릿(Secret)’을 어떻게 관리해야 할지는 모두의 공통된 고민입니다. 관리 방식은 보안, 운영...
eve
13 sec read

[MSA] Spring Cloud Gateway VS Apache APISIX : 단계별…

마이크로서비스 아키텍처(MSA)에서 API 게이트웨이는 시스템의 관문 역할을 하는 핵심 컴포넌트입니다. 수많은 Java 개발팀이 Spring 생태계와의 완벽한 통합성을 자랑하는 Spring Cloud Gateway를 선택해왔습니다. 그러나 시스템이...
eve
1 min read

[Kafka] 카프카의 심장: 토픽, 파티션, 프로듀서, 컨슈머 완벽 해부

Apache Kafka가 어떻게 대용량 데이터를 실시간으로, 그리고 안정적으로 처리할 수 있는지 궁금하신가요? 그 비밀은 Kafka를 구성하는 핵심 요소들의 유기적인 협력에 있습니다. Kafka는 마치 잘...
eve
1 min read