소스 코드 구성을 위한 2가지 구조화 옵션이 있습니다.
- Centralized, “monorepo”라고 알려졌습니다.
- Decentralized, “multirepo” 모델
그리고 특수한 성격의 프로젝트, 독립된 기능, 서로 다른 프로젝트간 공유된 기능, 비즈니스 애프리케이션 코드, 테스트, 인프라스터럭쳐 코드와 같은 소프트웨어 아키텍처의 성격에 따라 다른 대안이 있을 수 있습니다.
이러한 대안으로 선택되는 4가지 모델이 크게 있습니다.
- “Monorepo” (or “one-repo”, “uni-repo”)
- “Multirepo” (or “many-repo”, “poly-repo”)
- “Hybrid-repo”
- “Split-repo”
Monorepo
완벽한 centralized 모델로 Monorepo(mono repository)는 모든 프로젝트에 대한 모든 코드와 자산을 저장하는 단일 저장소 입니다.
공유 서비스 또는 라이브러리에 의해 다소 결합된 여러 다른 프로젝트, 응용 프로그램 및 기술로 구성될 수 있습니다.
모든 소스 코드를 저장한다고 해서 모든 변경 사항과 함께 전체 프로젝트를 컴파일해야 하는 것은 아닙니다.
Monorepo는 배포 주기와 저장소의 강력한 결합이 발생됩니다.
Monorepo는 Monolith repo가 아닙니다. Modular repo에 가깝습니다.
Multirepo
decentralized 모델로 source code management version control system에 여러 저장소를 사용합니다.
하나의 독립된 애플리케이션이고 다른 프로젝트와 직접적인 종속성이 없는 속성을 가집니다.
일반적으로 많이 선택되고 있는 모델 입니다.
decentralized system은 각각을 최적화 하지만 다른 시스템에 영향을 줄 수 있습니다.
팀 자율성이라는 한 가지 큰 이유 때문에 Multirepo 방식으로 대부분 전환합니다. 팀은 사용할 라이브러리, 앱 또는 라이브러리를 배포할 시기, 코드에 기여하거나 사용할 수 있는 사람에 대해 스스로 정합니다.
Hybrid repo
mixed-use of mono and multirepo models. 일부는 monorepo이고 다른 일부는 multirepo입니다. 결국 그들은 다양한 프로젝트의 소스 코드를 저장합니다.
팀 간 functions and libraries 공유를 지원할 수 있습니다.
이 모델에서는 공유 라이브러리가 빠르게 컴파일할 수 있어야 하고 공유 라이브러리를 관리하는 팀이 있어야 합니다.
예) SDK팀이 있고 이를 가지고 만드는 애플리케이션팀이 있거나 지원팀이 있는 경우
Split-repo
split-repo는 코드 저장에 사용되는 모노 리포지토리로, 프로젝트 아티팩트를 독립적으로 빌드 및 릴리스하기 위해 읽기 전용 리포지토리로 분할됩니다.
split-repo는 두 가지 주요 모델의 장점을 결합하려는 모델입니다.
- 라이브러리 공유 및 가능한 한 빨리 통합을 허용하는 중앙 집중식 코드 저장을 위한 monorepo
- 보다 세분화되고 독립적이며 빠른 배포를 수행하기 위한 다중 리포지토리
IS(Infrastructure) as Code를 위한 코드의 일관성을 유지시키기 위해 “ready-only” multi-repo라는 것을 알 수 있습니다.
기술별로 독립적 배포가 강력하게 이루어져야 하는 조직에서 자주 선택하는 모델입니다.
예) 제품이나 배포를 관리하는 팀의 경우 여러 조직별 제품 또는 모듈이 있고 이를 통합하여 하나의 번들로 나가는 경우
기억해야 할 사항
Google is efficient with monorepo, while Netflix is efficient on a multirepo model.
회사의 규모나 형식에 따라 어떤 모델을 선택하는 공식은 없습니다.
선택한 리포지토리 모델은 개발 프로세스에 밀접하게 통합된 구조로 되어 있습니다.
따라서 각 조직의 현재 및 미래 상황에 따라 절충안을 선택하여 저장소 모델을 선택해야 합니다.
“If it ain’t broken — don’t fix it!”
Monorepo의 장점을 하나도 놓치지 않는다면 Polyrepo를 계속 사용하십시오. Monorepo로 전환하기로 결정했다면 앱 수준 Monorepo로 시작하여 경험과 자신감을 얻은 다음 조직 수준 Monorepo로 이동할지 결정하는 것이 좋습니다.
참조
관련 내용은 아래 영상에서도 소개되고 있습니다.