1. 모노레포 개요


모노레포란 버전관리 시스템에서 두 개 이상의 프로젝트 코드가 동일한 저장소에 저장되는 소프트웨어 개발 전략으로 고전적 소프트웨어 개발 방식인 모놀리식 애플리케이션의 한계 때문에 출발했다.

2. 모놀리식 애플리케이션의 한계


소프트웨어 엔지니어링에서 모놀리식 어플리케이션은 모듈화 없이 설계된 소프트웨어 어플리케이션이다.

image.png

거대한 서비스를 개발한다고 했을 때, 소스 코드가 모듈화 없이 하나의 프로젝트로 구성한다고 가정해보자. 코드가 서로 직접적으로 의존하며 단 하나의 버전으로 관리되면서 관심 분리가 어려워질 것 이다.

또한 설계, 리팩토링, 배포 등의 작업을 매번 거대한 단위로 처리해야 하므로 개발상 많은 제약과 비효율이 있을 것이다.

3. 모듈화와 재사용성


이러한 모놀리식 구조의 한계는 모듈화(modularity)를 통해 해결할 수 있다. 일반적으로 모듈식 프로그래밍(modular programming)은 애플리케이션 로직의 일부를 재사용할 수 있도록 지원하고 전체 교체 없이 애플리케이션의 일부를 수정 또는 교체할 수 있게 해 유지 관리를 용이하게 한다.

image.png

그런데 이렇게 만든 모듈이 다른 애플리케이션에도 사용될 수 있다면 소스를 어디에 위치시켜야 할까? 아마도 해당 모듈을 위한 독자적인 저장소가 있다면 좀 더 관리하기 쉬울 것이다. 이 구조가 바로 멀티레포(multirepo)다.

4. 멀티레포