본문 바로가기
CI, CD

[Git] 모노레포 관련 개념 및 도구 정리

by 푸고배 2025. 5. 23.

모노레포

모노레포(Monorepo, Monolithic Repository)는 여러 프로젝트(패키지)를 하나의 저장소(repository)에서 관리하는 방식이다.

왜 모노레포를 사용하는가?

1. 코드 재사용 및 일관성 유지

  • 모노레포에서는 여러 프로젝트(패키지)가 하나의 저장소에 있기 때문에, 공통 라이브러리나 유틸 함수를 여러 프로젝트에서 쉽게 공유할 수 있다. (ex. @libs/utils, @libs/components 등을 만들어 여러 프로젝트에서 사용이 가능하다.)
  • 모든 프로젝트가 동일한 버전의 의존성을 가지므로, 버전 충돌이나 설정 차이로 인한 오류를 줄일 수 있다.

2. CI/CD 파이프라인 최적화

  • 프로젝트(패키지)별로 변경된 부분만 빌드하고 테스트 할 수 있어 효율적인 CI 사용이 가능하다.
  • 모든 패키지를 독립적으로 관리한느 멀티레포에서는 각 프로젝트마다 파이프라인이 따로 필요하지만, 모노레포는 중앙 집중식 파이프라인 설정이 가능하다.

3. 협업의 용이성

  • 큰 규모의 서비스라면 여러 팀이 하나의 저장소에서 일하므로, 코드 리뷰나 PR 관리를 통합할 수 있다.
  • 프론트엔드, 백엔더, 공통 라이브러리 개발자가 동시에 한 저장소에서 협업이 가능하다.
  • 구조와 명명 규칙을 레포 레벨에서 통일할 수 있어 유지 보수성이 높아진다.

4. 개발 환경 통합

  • ESLint, Prettier, Jest, Vitest, Storybook 등 개발 도구 설정을 한 번에 통일할 수 있다.
  • devDependencies도 공통화가 가능하기 때문에 패키지 설치 시간 및 디스크 용량을 절약할 수 있다.

5. 디자인 시스템 및 컴포넌트 공유

  • @my-org/ui-button처럼 하나의 컴포넌트를 여러 앱에서 재사용가능하기 때문에 '브랜드 일관성 유지 + 개발 효율 증가' 효과가 있다.

6. 코드 품질 및 테스트 보장

  • 모노레포 도구는 각 패키지의 테스트, 린팅, 타입체크 등을 통합된 기준으로 실행할 수 있다.
  • 전체 코드베이스에 대한 정기적인 통합 테스트가 쉬워진다.

7. 변경 사항 추적 및 영향 분석 용이

  • 단일 저장소에서 작업하기 때문에 '어떤 코드가 어디에 영향을 주는지' 파악하기 쉽다.
  • 모노레포 도구들은 변경된 파일에 따라 어떤 패키지만 빌드/테스트해야할지 자동으로 감지한다. (ex. Nx의 affected 명령어 -> 변경된 부분만 빌드/테스트가 가능하다.)

8. 버전 관리 단순화

  • 모든 패키지가 동일한 버전을 사용할 수 있다. (패키지별로 다르게 버전 관리도 가능하다.)
  • Lerna,Nx, Rush 등은 버전 자동 관리도 지원하기 때문에 릴리즈 관리를 효율적으로 할 수 있다. 

 

모노레포 도구

프로젝트의 규모가 커질수록 의존성, 빌드 속도, 변경 추적에 어려움이 생기는데 모노레포 도구는 이 구조를 효율적으로 관리할 수 있게 도와주는 도구들을 말한다.

 

대표적인 모노레포 도구의 종류

도구 특징 주요 사용처
Nx 성능 최적화에 강함 (캐싱, 병렬화), 플러그인 기반 구조 Angular, React, Node.js 등 다양한 프레임워크 지원
Turborepo Vercel에서 만든 빠른 빌드 캐시 기반 도구, 설정 간단 Next.js, React 등과 잘 맞음
Lerna 가장 오래된 도구 중 하나, npm/yarn 기반 패키지 관리 비교적 단순한 구조의 모노레포에 적합
Rush Microsoft에서 개발, 대규모 조직에 적합, 엄격한 규칙 Microsoft 내부 및 기업 환경에서 활용
Bazel Google 개발, 매우 강력하고 정교한 빌드 시스템 대규모 프로젝트, 언어 혼합 프로젝트 (C++, Java 등)
Pnpm Workspaces 패키지 간 의존성을 효율적으로 처리, 디스크 사용 절약 빠르고 가벼운 모노레포 구성에 적합
Yarn Workspaces yarn 내장 기능으로 여러 패키지를 monorepo로 관리 중소 규모 프로젝트에 유용
npm Workspaces npm v7 이상부터 공식 지원, 설정이 간단 소규모 프로젝트에 적합

 

정리(어떤 도구를 선택해야 하는가)

프로젝트 성격 추천 도구
다양한 프레임워크, 대규모 팀 협업 Nx, Rush
빠른 빌드, 프론트엔드 중심 Turborepo
단순한 의존성 관리, 빠른 구성 Yarn, npm, pnpm Workspaces
백엔드/프론트 섞인 대형 시스템 Bazel, Nx

 

참고

ChatGPT

 

댓글