모노레포란
모노레포(Monorepo)는 여러 프로젝트나 패키지를 하나의 저장소(Repository)에 통합해 관리하는 구조를 의미한다. 기존의 여러 저장소를 각각 관리하는 멀티레포(Multirepo) 방식과 달리, 하나의 레포지토리 내에서 다양한 애플리케이션, 라이브러리, 공통 모듈을 함께 관리한다.
다시 말해서 하나의 git 레포지토리에 여러 패키지를 두고 관리하게 되는 것이다.
참고로 모노레포(Monorepo)와 모놀리식(Monolithic) 아키텍처는 다른 개념이다.
모노레포 vs 모놀리식
-
모노레포는 저장소 관리 방식이다. 여러 독립적인 프로젝트가 하나의 저장소에 공존하지만, 각 프로젝트는 개별적으로 빌드, 테스트, 배포될 수 있다.
-
모놀리식은 소프트웨어 아키텍처 스타일이다. 하나의 거대한 코드베이스로 구성된 애플리케이션으로, 모든 기능이 단일 실행 파일이나 서비스로 배포된다. 각 기능이 긴밀히 연결되어 있어 변경이 있을 때 전체 시스템에 영향을 줄 가능성이 크다.
문제 상황: 하나의 서비스와 여러 클라이언트
팀 내에서 진행중이던 프로젝트에서 하나의 서비스를 두 곳의 클라이언트에 제공하고 있었다. 대부분의 기능은 같았지만 각각의 요구사항과 디자인의 차이로 인해 하나의 서비스는 두개의 브랜치로 갈라져서 각각 관리되 고 있었다.
겉으로는 하나의 레포이긴 했지만 사실상 두개의 레포처럼 두 브랜치는 만날 수 없었다. 공통적인 컴포넌트, 로직들을 분리해서 하나로 관리할 수 없었다.
우리 팀에서 모노레포는 만나지 못하던 두 브랜치의 공통 부분을 만날 수 있게 하고, 두 애플리케이션을 하나의 포인트에서 관리할 수단으로 사용되었다.
모노레포 적용 후
모듈화
패키지 간의 공통 컴포넌트, 로직은 공통 모듈을 통해 공유하도록 했다. 공통 모듈을 만들기 위해서는 코드를 재사용 가능하도록 작성하는 노력이 필수적이었다.