모노레포와 멀티레포

hyund·2024년 8월 26일

모노레포(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. 코드 중복 가능성

  • 공통으로 사용하는 코드나 기능이 여러 프로젝트에서 중복 작성될 수 있음

0개의 댓글