작은 프로젝트들을 하나의 파일에서 관리하고싶어서 찾고찾다가 발견했다.
모노레포(Monorepo)
여러 프로젝트나 패키지를 단일 코드 저장소에서 관리하는 소프트웨어 개발 접근법
monolithic repository의 줄임말로, 관련된 여러 프로젝트의 코드를 하나의 버전 관리 저장소에 보관하는 방식
각 프로젝트를 개별 저장소(멀티레포)로 관리하는 전통적인 방식과 대비된다.
monorepo/
├── packages/ # 개별 프로젝트들
│ ├── project-a/ # 첫 번째 프로젝트
│ │ ├── package.json
│ │ └── src/
│ ├── project-b/ # 두 번째 프로젝트
│ │ ├── package.json
│ │ └── src/
│ └── shared/ # 공유 코드
│ ├── package.json
│ └── src/
├── package.json # 루트 package.json
모노레포의 주요 특징
- 코드 공유: 여러 프로젝트 간 코드와 컴포넌트를 쉽게 공유
- 통합 버전 관리: 모든 프로젝트의 버전 히스토리를 통합적으로 관리
- 일관된 개발 환경: 모든 프로젝트에 동일한 도구와 프로세스 적용
- 원자적 변경: 여러 프로젝트에 걸친 변경사항을 한 번에 커밋 가능
모노레포가 적합한 상황
- 관련 프로젝트 관리: 서로 의존성이 높거나 함께 발전하는 프로젝트들
- 대규모 조직: 여러 팀이 협업하며 코드베이스를 공유하는 경우
- 일관된 개발 경험: 모든 프로젝트에 동일한 코딩 스타일, 테스트, 빌드 과정이 필요할 때
- 통합 테스트 중요성: 여러 컴포넌트 간의 통합 테스트가 중요한 경우
- 빠른 리팩토링: 여러 프로젝트에 걸친 리팩토링이 자주 필요할 때
모노레포 사용 시 고려사항
- 저장소 크기: 시간이 지남에 따라 저장소 크기가 매우 커질 수 있음
- 빌드 시간: 전체 빌드 시간이 길어질 수 있어 적절한 최적화 필요
- 접근 제어: 대규모 팀의 경우 적절한 접근 권한 관리 필요
- 도구 지원: 모노레포 관리를 위한 특별한 도구(Lerna, Nx, Turborepo 등) 필요
모노레포를 효율적으로 관리하기 위한 주요 도구
모노레포 관리: Lerna, Nx, Turborepo 등등
작은 모노레포는 Yarn/npm Workspaces가 충분하고, 대규모 프로젝트는 Nx나 Turborepo같은 고급 도구가 효과적이다.
소규모 모노레포 (2-5개 프로젝트)
- Yarn Workspaces / npm Workspaces
- 기본적인 모노레포 기능 제공
- 설정이 간단하고 학습 곡선이 낮음
- 의존성 호이스팅으로 디스크 공간 절약
- 별도의 추가 도구 없이 기본 패키지 매니저만으로 관리 가능
중간 규모 모노레포 (5-20개 프로젝트)
- Lerna (+ Yarn/npm Workspaces)
- 버전 관리와 배포 자동화 기능 추가
- 워크스페이스와 함께 사용하면 더 효과적
- 명령어 실행 병렬화 지원
- 패키지 간 의존성 관리 기능
대규모 모노레포 (20개 이상 프로젝트)
- Nx 또는 Turborepo
- 정교한 의존성 그래프 분석
- 증분 빌드와 캐싱으로 성능 최적화
- 영향 분석(affected commands)으로 변경된 부분만 빌드/테스트
- 대규모 팀 작업에 효율적인 도구
'IT 알쓸신잡' 카테고리의 다른 글
혼자 할 땐 몰랐던 커밋 메시지의 중요성 (0) | 2025.04.04 |
---|---|
굳바이 styled-components😢 (0) | 2025.04.01 |
프로그래밍 언어와 기술 ? (0) | 2025.03.04 |
사용자 / 클라이언트 / 서버 (0) | 2025.02.19 |
GitHub 원격 저장소와 연결하고 변경 사항 푸시하기 (0) | 2025.01.24 |