티스토리 뷰
728x90
멀티 레포(Multi-Repo)와 모노레포(Mono-Repo)는 소스코드를 관리하는 방식에 따른 전략입니다. 각각의 특징과 장단점, 그리고 선택 시 고려할 점을 정리해 드리겠습니다.
1. 멀티 레포(Multi-Repo) 방식
멀티 레포는 서비스 또는 모듈별로 개별 Git 저장소(repository)를 사용하는 방식입니다.
✅ 장점
- 명확한 경계 설정
- 서비스 간 명확한 경계를 두어 관리할 수 있음
- 독립적인 관리 용이
- 독립적인 CI/CD 및 배포 프로세스를 가질 수 있음
- 세분화된 접근 권한 설정
- 프로젝트마다 다른 접근권한과 관리 정책 설정 가능
- 독립적인 버전 관리
- 모듈별 독립적 버전 관리와 배포 가능
❌ 단점
- 의존성 관리 복잡성 증가
- 여러 레포지토리 간의 의존성 관리가 어렵고 복잡함
- 코드 중복 가능성 증가
- 공통 코드의 재사용이 쉽지 않아 코드 중복 발생 가능성 높음
- 복잡한 변경사항 관리
- 여러 레포에 걸쳐 변경사항이 있을 경우 관리 어려움
- 전반적인 가시성 저하
- 전체 시스템 구조 파악이 어려워질 수 있음
2. 모노레포(Mono-Repo) 방식
모노레포는 모든 서비스 또는 모듈을 단일 Git 저장소에서 관리하는 방식입니다.
✅ 장점
- 코드 공유와 재사용 용이
- 코드 중복을 줄이고 공통 코드를 쉽게 관리할 수 있음
- 전체 프로젝트의 명확한 가시성 확보
- 하나의 레포 안에서 시스템 구조를 파악하기 쉬움
- 변경사항 관리 편리
- 여러 서비스 간의 변경사항을 쉽게 추적하고 관리할 수 있음
- 리팩토링 효율 향상
- 시스템 전반에 걸친 변경을 쉽게 수행할 수 있음
❌ 단점
- 레포지토리의 크기와 복잡성 증가
- 레포 크기 증가로 clone이나 빌드가 느려질 수 있음
- CI/CD 파이프라인 복잡성
- 개별 서비스의 변경 사항을 추적하고 선택적으로 빌드하는 복잡한 CI/CD 구성이 필요할 수 있음
- 접근 권한 및 보안 관리 어려움
- 세부적인 권한 관리가 복잡할 수 있음
- 개별 서비스의 독립적인 배포가 어려워질 수 있음
- 배포 전략이 복잡해질 수 있음
3. 어떤 방식을 선택할까?
다음과 같은 기준으로 멀티 레포 또는 모노레포를 선택할 수 있습니다.
기준 멀티 레포 추천 모노레포 추천
서비스 규모 | 작고 독립적인 서비스가 많을 때 | 서비스 간 의존성이 높고 규모가 크지 않을 때 |
변경 빈도 | 개별 서비스가 독립적으로 변경될 때 | 여러 서비스가 동시에 자주 변경될 때 |
코드 공유 필요성 | 코드 공유가 드물거나 없을 때 | 코드 공유가 많을 때 |
CI/CD 복잡성 허용도 | 개별 CI/CD를 간단히 운영하고 싶을 때 | 복잡하더라도 자동화 역량이 충분할 때 |
팀 크기 | 소규모 팀이 개별 프로젝트를 관리할 때 | 협업과 공유가 활발한 큰 팀일 때 |
4. 하이브리드 방식(혼합 전략)
실무에서는 멀티 레포와 모노레포의 장점을 결합한 하이브리드 방식을 선택하는 경우도 많습니다.
- 공통 라이브러리와 코드만 모노레포로 관리
- 독립적인 애플리케이션은 개별 레포로 분리하여 관리
- Git submodule 또는 서브트리(subtree)를 활용한 코드 공유
5. GitLab 및 Jenkins를 활용한 CI/CD 관점에서의 고려 사항
- 멀티 레포 활용 시
- 각 레포지토리마다 독립적인 Jenkins 파이프라인을 구성
- 공통 파이프라인 템플릿을 활용하여 일관성 확보 가능
- GitLab 그룹을 활용한 권한 관리 및 프로젝트별 접근 통제 가능
- 모노레포 활용 시
- 변경된 모듈만 선택적으로 빌드할 수 있도록 Jenkins Job을 구성 (Conditional 빌드)
- GitLab CI의 only/changes 또는 Jenkins의 플러그인(예: MultiBranch Pipeline)을 활용하여 변경된 모듈만 식별하여 빌드하도록 최적화
결론적으로,
사용자가 현재 GitLab 및 Jenkins를 활용해 CI/CD를 구축하고 있으며 Gradle을 사용하는 환경이라면, 보통 관리 편의성과 CI/CD 자동화 전략을 고려할 때 다음의 추천을 드릴 수 있습니다.
- 공통 라이브러리 및 의존성이 많은 서비스들은 모노레포로 관리
- 독립성이 높은 애플리케이션은 멀티 레포로 관리
- GitLab의 서브모듈이나 GitOps 기법(예: Argo CD)을 활용하여 전체 시스템 관리의 복잡성을 줄일 수 있음
이러한 전략을 활용하면 시스템의 특성에 맞게 효율적으로 레포지토리 전략을 구성할 수 있습니다.
728x90
'CI_CD' 카테고리의 다른 글
Sparse Checkout이란? (0) | 2025.03.20 |
---|---|
Git Submodule이란? (0) | 2025.03.20 |
GitLab을 포함한 Git 환경에서 레포지토리의 일부 코드나 디렉터리만 가져오는 5가지 방법 (0) | 2025.03.20 |
Docker Compose란? (0) | 2025.03.20 |
Scratch 컨테이너란? (0) | 2025.03.20 |