모노레포
모노레포는 여러 프로젝트나 패키지를 하나의 Git 저장소에서 함께 관리하는 저장소 운영 방식입니다.
핵심 특징
- 여러 앱, 패키지, 공통 모듈을 하나의 저장소에 둡니다.
- 공통 설정과 의존성을 중앙에서 관리하기 쉽습니다.
- 프로젝트 간 변경사항을 하나의 커밋이나 PR에서 함께 추적할 수 있습니다.
- 빌드 범위 계산, 캐시, 의존성 그래프 관리가 중요해집니다.
구성 예시
repo/
apps/
web/
admin/
packages/
ui/
eslint-config/
utils/
package.json
apps에는 실제 서비스 애플리케이션을 두고, packages에는 여러 앱에서 공유하는 UI 컴포넌트나 유틸리티를 둘 수 있습니다.
장점
- 공통 코드와 설정을 쉽게 공유할 수 있습니다.
- 여러 프로젝트에 걸친 변경을 한 번에 반영하고 리뷰할 수 있습니다.
- 패키지 버전 불일치와 중복 설정을 줄일 수 있습니다.
- 전체 코드베이스를 기준으로 검색과 리팩터링을 하기 쉽습니다.
단점
- 저장소 규모가 커질수록 빌드와 테스트 시간이 길어질 수 있습니다.
- 권한을 프로젝트별로 세밀하게 나누기 어렵습니다.
- CI/CD 파이프라인이 복잡해질 수 있습니다.
- 영향 범위 계산과 캐시 전략이 없으면 작은 변경에도 전체 작업이 실행될 수 있습니다.
도구
- npm workspaces, yarn workspaces, pnpm workspace
- Nx
- Turborepo
- Bazel
핵심 정리
모노레포는 여러 프로젝트를 하나의 저장소에서 관리해 코드 공유와 일관성을 높이는 방식입니다.
대신 규모가 커질수록 빌드, 테스트, 권한, CI/CD를 다루기 위한 도구와 규칙이 필요합니다.