모노레포(Monorepo)란?

Daehyeon Yun·2024년 8월 7일
post-thumbnail

이미지 출처 : https://com789.tistory.com/44

모노레포(Monorepo) 는 두 개 이상의 프로젝트 코드를 하나의 버전 관리 저장소(repository)에서 관리하는 방법을 말한다.


💡모노레포(Monorepo)의 특징

  1. 단일 코드 저장소 : 모든 소스 코드를 단일 코드 저장소에 유지한다.
  2. 모듈화 : 코드를 모듈화하여 필요한 모듈만 불러와 사용할 수 있다.
  3. 의존성 관리 : 모든 코드가 단일 코드 저장소에 존재하기에 의존성 문제를 빠르게 해결할 수 있다.
  4. 협업성 : 모든 코드가 단일 코드 저장소에 존재하기에 다른 개발자들 간의 협업이 편리하다.
  5. 코드 품질 : 코드 리팩터링시 모든 프로젝트의 상황을 고려하기에 코드 품질을 일관성 있게 유지할 수 있다.

🤔 모노레포(Monorepo)는 왜 등장했을까?

모노레포(Monorepo) 가 등장한 대표적인 이유는 대규모 소프트웨어 개발 프로젝트에서 발생하는 다양한 문제를 해결하기 위해서라 한다.

대규모 프로젝트와 같은 엔터프라이즈 애플리케이션은 여러 개의 코드 저장소가 생성된다. 표면적으로 봤을 때는 큰 문제가 없는 것 처럼 보이지만 아래와 같은 문제점들 때문에 프로젝트 관리에 어려움이 발생할 수 있다.

  • 중복되는 코드들
  • 서로 다른 패키지 의존성
  • 서로 의존하는 프로젝트들끼리의 리팩터링 비용
  • 코드가 저장소마다 상황이 달라 개발자들 사이의 협업이 어려워지는 문제

😉 이러한 문제를 해결하기 위해 모든 프로젝트의 코드를 단일 코드 저장소 에서 관리함으로써 중복을 최소화시키고 의존성을 관리하여 개발자의 협업과 생산성을 증가시키는 방법으로 등장하게 되었다.


👎 모노레포(Monorepo)의 단점

→ 위와 같이 모든 코드를 단일 코드 저장소에서 관리한다는 특성 상 아래와 같은 단점이 존재한다.

  1. 복잡성 증가 : 여러 프로젝트를 하나의 저장소에서 관리하므로 코드 충돌 등의 문제가 발생할 가능성이 높아진다.
  2. 빌드 시간 증가 : 모든 프로젝트를 함께 빌드해야 하므로 사소한 변경사항이 있더라도 빌드 시간이 증가된다는 문제가 있다.
  3. 변경 사항이 모든 프로젝트에 영향을 끼침 : 하나의 프로젝트에서 발생한 변경 사항이 모든 시스템에 영향을 미칠 수 있다.

😎 그렇다면 꼭 모노레포(Monorepo) 방식을 사용하여 개발해야하나?

모노레포(Monorepo) 틀성 상 프로젝트의 규모, 복잡성, 의존성 등을 고려하여 고민해야하며 아래와 같은 경우는 모노레포(Monorepo) 가 적합하지 않을 수 있다.

  • 작은 프로젝트 : 사이드 프로젝트 혹은 작은 애플리케이션을 구축하는 경우에 모노레포를 사용하는 것은 오버 엔지니어링이 될 수 있다.
  • 다른 언어를 사용하는 경우 : Java 프로젝트와 JavaScript 프로젝트처럼 서로 다른 언어로 개발된 프로젝트들을 모노레포 방식으로 통합하기 어렵다.
  • 서로 다른 배포 주기를 가진 경우 : 모노레포는 모든 프로젝트를 함께, 동시에 배포한다 는 특성이 있어 서로 다른 배포 주기를 가진 프로젝트가 있는 경우는 멀티 레포(Multirepo, 뜻 그대로 하나의 프로젝트를 하나의 저장소에서 관리) 방식이 더 적합하다.
profile
열심히 살아야지

0개의 댓글