모노레포란 무엇인가?
모노레포란 무엇인지 정리한 글입니다.
모노레포
모노레포의 모노는 모놀리스를 떠올리면 된다. 모놀리스는 하나의(mono-) 돌(lith)이라는 의미로 단 한 덩어리의 석재만을 사용하여 만든 구조물을 일컫는다. 주로 고대에 만든 돌 기둥이나 첨탑을 가리킬 때 사용한다.
스탠리 큐브릭 감독의 2001 스페이스 오디세이의 한 장면을 떠올리는 사람도 있을 것이다. 영화에서 유래한 언어는 아니지만 대표적으로 예를 들 수 있다. 또는 요즘에도 있는지 모르겠지만 오디오 기능중에 모노, 스테레오를 생각하면 된다. 같은 의미이다.
monorepo.webp
풀 네임은 '모놀리식 레포지토리'로 모놀리스처럼 하나의 저장소에 프로그램과 관련된 모든 것들을 포함시킨 형태를 말한다. 위 그림처럼 관련된 모든게 저장되지만 프로그램을 실행하기 위해서 전부다 필요한 것은 아니다. 플러그인과 같이 없어도 동작하는 것들도 모두 포함하여 관리하게 된다.
멀티 레포지토리
multirepo.webp
모듈별로 저장소를 따로 만들어 관리하는 방법으로 모노레포의 반대되는 개념 또는 상위호환 개념으로 소개하는 경우가 있다. 그러나 이 둘은 상하위나 반대개념이 아닌 상호보완의 관계를 가지고 있는 방법론이다. 프로젝트의 상황에 맞춰서 사용하는 것이 좋다.
모노레포의 장점과 단점
모노레포는 동일한 DevOps를 구성할 수 있고 기능을 재사용하는 집합성 프로젝트들을 관리할 때 적합하다. 고려해야할 요소들이 더 늘어나지만 관리포인트를 한 곳으로 집중할 수 있다. 그러나 프로젝트가 점점 거대해지기 시작하면 단점들이 부각되기 시작하기 때문에 주의하여야 한다.
실행에 불필요한 모든 요소까지 다 포함하여 관리하기 때문에 프로젝트 구성을 위한 최초 다운로드에 큰 시간을 할애 해야할 수도 있다. 또한, 모든 협력자들이 이 저장소를 어느 정도 이해해야 작업이 가능하기 때문에 전체적인 학습 비용이 추가로 필요하다. 모노레포 전체를 함께 빌드하는 경우에는 하나의 모듈이 실패하면 프로젝트 전체가 빌드를 실패할 수 있다는 점도 간과할 수 없다.
더불어 이런 단점을 보완하기 위한 의존성 간소화, 테스트 간소화, 환경 통일 방안, 프로젝트간 리팩토리 용이성, 모듈별 개별 빌드 방안 등 고려해야 할 요소가 상당히 많아 진다. 현대에는 네트워크 환경과 저장매체의 발달 등으로 이런 단점들의 치명도가 내려가고 다양한 관리기법(workspace, lerna, nx 등)이 등장한 덕에 대규모 프로젝트의 경우에도 모노레포 관리기법이 큰 인기를 얻는 추세이다.
초판: 2025. 09. 22. 22:52:25
© 2025 이 문서는 "CC BY 4.0 국제규약" 라이선스로 배포 되었습니다. 모든 권리는 저자에게 있습니다.