mono(단일)과 repo(레포지토리)를 합친 용어, 여러 프로젝트 또는 패키지를 하나의 코드 저장소에 통합하여 관리하는 방식
프로젝트 단위로 분리된 구조
모든 프로젝트가 하나의 저장소 안에서 각각 독립적인 폴더로 구성되며, 각 폴더는 독립적인 패키지로 관리됩니다. 이때 프로젝트 간의 공통 의존성은 yarn workspaces나 npm workspaces 같은 기능을 사용해 중앙에서 관리
이를 통해 중복된 의존성을 최소화하고, 프로젝트 간 코드 공유를 쉽게 함
공통 모듈을 별도의 폴더로 분리하는 방식
ex - 여러 프로젝트에서 자주 사용하는 유틸리티 함수, 스타일, 공통 컴포넌트를 shared라는 폴더에 모아두고 각 프로젝트에서 이를 가져다 사용하는 방식 이러면 공통 코드를 한 번만 업데이트해도 여러 프로젝트에 즉시 반영할 수 있어 효율적
여러 프로젝트의 코드 및 설정 등을 일관되게 관리할 수 있다는 점
ex - 대규모 조직에서 여러 팀이 각기 다른 서비스를 개발해도, 모노레포를 통해 동일한 코드베이스에서 협력할 수 있음.
이를 통해 공통 모듈이나 설정 등을 공유하여, 불필요한 중복 작업을 줄이고 협엽 효율성을 높일 수 있음
중앙화된 의존성 관리를 가능하게 해줌
예를 들어, 프로젝트 내에서 공통으로 사용되는 유틸리티나 컴포넌트를 한 번 업데이트하면 모든 관련 프로젝트에 즉시 적용할 수 있음
여러 프로젝트들이 동일한 버전 관리 시스템을 공유
이를 통해 한 프로젝트에서 변경된 사항이 다른 프로젝트에 미치는 영향을 보다 명확히 추적 가능
스케일링이 복잡하고 어려워짐
여러 프로젝트들이 모여 있어 코드베이스가 빠르게 커지는데, 이때 빌드 및 테스트 시간이 그와 비례하여 길어짐. 또한 CI/CD 파이프라인 관리의 복잡도가 증가함
이러한 단점을 극복하기 위해 Nx, Turborepo와 같은 모노레포 관리 툴을 이용할 수 있음
권한 관리가 까다로울 수 있음
모든 프로젝트가 하나의 저장소에 통합되기 때문에 특정 팀이나 프로젝트만 접근 권한을 가지도록 설정하는게 어려움
그래서 작은 규모의 팀이나 단일 프로젝트 중심의 개발 환경에선 오히려 복잡성을 증가시킬 가능성이 있어 모노레포 사용이 적합하지 않을 수 있음