MSA(Microservices Architecture) 환경에서 Git Submodule과 Git Subtree를 혼합한 하이브리드 방식

40 sec read

MSA(Microservices Architecture) 환경에서 Git Submodule과 Git Subtree를 혼합한 하이브리드 방식으로 레포지토리를 운영하는 방법은 공통 라이브러리 및 자주 변경되는 서비스와 상대적으로 드물게 변경되는 내부 모듈의 특성을 잘 반영하여 구성하는 것이 중요합니다.


🧩 1. MSA 환경에서의 하이브리드 사용 목적

MSA 환경에서 Git 하이브리드를 고려하는 주요 이유:

  • 여러 서비스 간에 공유되는 공통 컴포넌트가 많을 경우 (→ Submodule)
  • 특정 서비스가 별도의 레포지토리로 관리되지만, 하나의 서비스처럼 통합 관리가 필요할 때 (→ Subtree)
  • 여러 서비스가 공통의 일부를 가지면서도 독립적인 빌드 및 배포가 필요할 때 (→ 하이브리드)

📐 2. MSA 환경에서의 Git Submodule과 Subtree 역할 정의

구분 추천 활용법 활용법 
Git Submodule공유 라이브러리, API 정의 및 인터페이스 레이어독립적으로 관리되며, 빈번하게 변경되는 공통 컴포넌트에 적합
Git Subtree서비스 간의 공유된 특정 로직, 내부 모듈, 배포 및 히스토리의 통합이 중요한 서비스주 레포의 일부처럼 관리되어 복잡성을 줄이며, 주기적이고 드문 빈도로 변경될 때 효과적

🔗 3. MSA 하이브리드 Git 운영의 실전 사례 및 구조 예시

다음과 같이 MSA 환경에서 하이브리드 레포지토리를 구성할 수 있습니다.

MSA-Project (Main Monorepo or Multi-repo)
├── common-api/             [Submodule]   # 공유되는 API 인터페이스
├── common-auth-lib/        [Submodule]   # 인증/인가 공통 라이브러리
├── common-logging-lib/     [Submodule]   # 공통 로깅 모듈 (빈번 업데이트)
│
├── services/
│   ├── order-service/
│   │   ├── src/...
│   │   └── libs/payment-module/ [Subtree] # 드물게 업데이트되는 지불모듈
│   │
│   └── payment-service/
│       ├── src/...
│       └── libs/fraud-detection-module/ [Subtree] # 부정 탐지 모듈
│
└── frontend/
    └── web-app/ [Subtree or Independent Repo]
  • Submodule: 모든 서비스에서 참조하는 공통적인 API 정의 및 인증/인가, 로깅 모듈을 관리합니다.
  • Subtree: 서비스 내에서 독립적이지만 자주 변경되지 않고, 서비스와 밀접한 모듈을 관리합니다.

🚩 4. MSA 환경에서의 Submodule 활용 방법

① 공통 모듈을 Submodule로 등록

# API 정의 모듈 등록
git submodule add https://gitlab.com/your-org/common-api.git common-api

# Submodule 초기화 및 업데이트
git submodule init
git submodule update --remote

② CI/CD 환경에서의 Submodule 사용법 (예: Jenkins, GitLab CI)

# GitLab CI/CD 예제 (.gitlab-ci.yml)
stages:
  - build

build_order_service:
  stage: build
  script:
    - git submodule update --init --recursive
    - ./gradlew :services:order-service:build
  • Submodule은 각 서비스 빌드 시마다 최신 커밋을 참조하거나 특정 태그를 사용하여 관리할 수 있습니다.

🚩 5. MSA 환경에서의 Subtree 활용 방법

① Subtree로 하위 모듈 추가

# payment-module을 Subtree로 등록
git subtree add --prefix=services/order-service/libs/payment-module \
  https://gitlab.com/your-org/payment-module.git main --squash

② Subtree 업데이트

# 최신 변경사항을 주기적으로 가져오기
git subtree pull --prefix=services/order-service/libs/payment-module \
  https://gitlab.com/your-org/payment-module.git main --squash
  • Subtree는 서비스 코드의 일부로 통합되므로 별도 작업 없이 자동으로 빌드됩니다.
  • 서비스 변경 사항과 함께 Subtree의 변경사항도 기록됩니다.

🔍 6. MSA 환경에서 하이브리드 운영을 위한 Best Practices

✅ 권장사항

  • Submodule은 빈번히 변경되는 공통 라이브러리 또는 API 관리에 사용하세요.
  • Subtree는 서비스 내 모듈로 통합되어 관리되는 코드에 사용하세요.
  • CI/CD 환경에서 Submodule 업데이트를 위한 프로세스를 명확히 정의하세요.

❌ 주의사항

  • Submodule은 개별적으로 별도 관리가 필수이므로 관리 비용이 높아질 수 있습니다.
  • Subtree를 너무 자주 업데이트하면 주 레포의 히스토리가 복잡해질 수 있습니다.

🛠️ 7. 실무에서 추천하는 MSA Git 하이브리드 활용 전략

다음과 같은 전략을 권장합니다.

MSA 레포지토리 관리 전략 사용 방법이유
Submodule 중심공통 API, 인증 라이브러리 등 자주 업데이트 필요 시독립적 관리와 신속한 변경사항 반영
Subtree 중심서비스 내부 통합 관리가 중요하고 상대적으로 변경 빈도가 낮은 모듈통합된 히스토리로 관리 간소화
하이브리드 병행두 가지 유형의 코드를 적절히 혼합하여 운영 필요 시유지보수성 및 히스토리 관리 최적화

🎯 최종 추천 구성법

**”공통성”**과 **”변경 빈도”**를 기준으로 선택:

  • 높은 공통성 + 높은 변경 빈도 → Submodule
  • 높은 공통성 + 낮은 변경 빈도 → Subtree
  • 낮은 공통성 + 독립성 강함 → 별도 레포로 운영

이를 통해 MSA 환경의 특성을 최대한 활용하면서 관리 복잡성을 낮출 수 있습니다.

쿠버네티스 시크릿 관리, 어떤 방법이 최선일까? 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