2026-03-27
모노레포(Monorepo)
모노레포란
여러 프로젝트나 패키지를 하나의 저장소(Repository)에서 함께 관리하는 방식
하나의 저장소 안에서
- 웹 서비스
- 관리자 페이지
- 공통 UI 라이브러리
- 유틸 패키지
등을 같이 관리 가능
repo/
├─ apps/
│ ├─ web
│ └─ admin
├─ packages/
│ ├─ ui
│ └─ utils
⇒ 관련 있는 여러 프로젝트를 하나의 레포에서 통합 관리하는 구조
왜 사용하는가
프로젝트가 커지면 여러 서비스가 같은 코드를 공유하는 경우가 많다.
예시)
- 공통 버튼 컴포넌트
- 디자인 시스템
- API 타입
- 유틸 함수
이걸 레포마다 따로 관리하면
- 중복 코드 발생
- 버전 관리 복잡
- 동기화 어려움
⇒ 해결 위해 모노레포 사용
모노레포의 장점
- 공통 코드 재사용이 쉬움 공통 컴포넌트나 유틸을 여러 프로젝트에서 함께 사용할 수 있다.
- 일관성 있는 개발 환경 유지 eslint, prettier, tsconfig 같은 설정을 통일하기 쉽다.
- 변경 관리가 쉬움 공통 패키지를 수정했을 때 관련 프로젝트를 같은 레포 안에서 함께 수정할 수 있다.
- 협업 효율 향상 여러 팀이 하나의 기준 아래 작업할 수 있다.
모노레포의 단점
- 초기 설정이 복잡함 빌드, 테스트, 의존성 관리 구조를 잘 잡아야 한다.
- 레포 규모가 커질 수 있음 프로젝트가 많아질수록 관리가 어려워질 수 있다.
- 빌드 최적화가 중요함 전체를 매번 빌드하면 비효율적이기 때문에 변경된 패키지만 빌드하는 전략이 필요하다.
멀티레포(Multi-repo)와의 차이
- 모노레포
- 하나의 저장소에 여러 프로젝트 존재
- 공통 코드 공유 쉬움
- 일관성 유지 용이
- 멀티레포
- 프로젝트마다 저장소 분리
- 독립성 높음
- 프로젝트 간 관리 분리 쉬움
모노레포에서 자주 쓰는 도구
- Turborepo
- Nx
- pnpm workspace
- Yarn workspace
- Lerna
이런 도구를 사용해
- 패키지 연결
- 빌드 캐싱
- 변경된 프로젝트만 실행