모노레포(Monorepo)
여러개의 프로젝트를 하나의 저장소에서 통합적으로 관리하는 방식으로 각각의 프로젝트를 독립적인 모듈 관리가 가능.
ex) MonoTemp라는 모노레포가 있고 그 안에 a,b,c 세개의 프로젝트(모듈)가 있을 경우, 이들은 각자 고유의 코드, 의존성, 설정 파일 등을 가질 수있다. 그렇기 때문에 a 프로젝트에서 변경사항은 나머지 모듈에 영황을 주지않고 관리 할수있음
특&장점
1. 단일 저장소 관리
- 모든 프로젝트, 모듈, 라이브러리, 구성 요소가 하나의 저장소에서 관리
- 저장소 내부에서는 각 프로젝트를 독립된 디렉토리로 구분
2. 코드 재사용 및 공유 용이
- 프로젝트 간에 공통 코드나 라이브러리를 쉽게 공유
- 코드 변경 사항을 여러 프로젝트에서 즉시 반영 가능
3. 효율적인 의존성 관리
- 공통으로 사용하는 라이브러리/패키지의 버전을 중앙에서 관리하여 각 프로젝트가 항상 동일한 버전을 사용
- 공통 의존성이나 모듈의 업데이트를 한 번에 적용
4. 단일 빌드 시스템
- 여러 프로젝트를 하나의 빌드 시스템으로 관리
- 모든 프로젝트에 대해 동일한 빌드, 테스트, 배포 파이프라인을 사용할 수 있어, 효율적인 관리가 가능
단점
1. 복잡한 설정 및 관리
- 여러 프로젝트를 하나의 레포에서 관리하다 보니, CI/CD 설정이 복잡해질 수 있음
2. 빌드 시간 증가
- 레포 내 모든 프로젝트를 빌드해야 하므로 프로젝트 크기만큼 빌드도 시간이 늘어날 수 있음.
멀티레포(Multirepo)
각 프로젝트별로 개별 레포지토리로 분리되어 관리하는 방식. 각 프로젝트가 완전히 독립적이기 때문에 프로젝트의 복잡도가 낮음
ex) a, b, c라는 세 개의 프로젝트가 있다면, 각각의 프로젝트는 별도의 레포지토리 가지며 자체적으로 관리되고 배포할 수 있음
특&장점
1. 프로젝트 독립성
- 각 프로젝트는 독립적으로 개발, 테스트, 배포될 수 있음
- 하나의 프로젝트에 변경 사항이 생겨도 다른 프로젝트에 영향을 주지않음
2. 프로젝트별 CI/CD
- 각 프로젝트는 독립적인 CI/CD 파이프라인을 가질 수있음
3. 단순한 설정 및 관리
- 하나의 저장소에 너무 많은 코드나 설정이 쌓이지 않으므로, 관리가 용이
4. 유연한 버전관리
- 각 프로젝트가 자신의 버전을 독립적으로 관리함
단점
1. 의존성 관리의 복잡성
- 프로젝트 간에 코드나 기능을 공유하려면, 별도의 패키지로 배포하고 이를 의존성으로 관리해야 하므로, 관리가 복잡해짐
ex) repo-a가 repo-b의 기능을 필요로 한다면, repo-b를 NPM 패키지로 배포한 후 repo-a의 package.json에서 repo-b를 의존성으로 추가해야 한다.
2. 코드 중복 가능성
- 공통으로 사용하는 코드나 기능이 여러 프로젝트에서 중복 작성될 수 있음