3. 모노레포(Monorepo)가 뭔데

PSSGYT·2025년 8월 5일

뭐가 뭔데

목록 보기
3/4

정의

모노레포(Monorepo)는 단일(Mono) 저장소(Repository)의 줄임말

소프트웨어 개발에서 관련된 여러 프로젝트의 소스 코드를 하나의 버전 관리 저장소에 모두 모아 관리하는 전략을 의미

이는 각 프로젝트마다 별도의 저장소를 사용하는 '폴리레포(Polyrepo)' 방식과 대조됨

과거에는 거대한 단일 애플리케이션을 의미하는 '모놀리식(Monolithic)'과 혼동되기도 했지만, 모노레포는 여러 개의 개별 프로젝트가 잘 정의된 관계를 가지고 한곳에 모여 있는 형태라는 점에서 차이가 있음

모노레포의 주요 특징 및 장점

모노레포는 여러 프로젝트를 한곳에서 관리함으로써 다양한 이점을 제공함

  • 코드 공유 및 재사용 용이:
    모든 코드가 한곳에 있어 공통 라이브러리나 컴포넌트를 쉽게 공유하고 재사용할 수 있습니다. 이는 코드 중복을 줄이고 일관성을 유지하는 데 도움이 됩니다.
  • 원자적 커밋(Atomic Commits):
    여러 프로젝트에 걸친 변경 사항을 단일 커밋으로 묶을 수 있습니다. 예를 들어, API와 클라이언트의 변경이 동시에 필요한 경우, 하나의 커밋으로 처리하여 두 프로젝트 간의 동기화를 보장하고 잠재적인 오류를 방지할 수 있습니다.
  • 간소화된 의존성 관리:
    모든 프로젝트가 동일한 저장소에 있으므로 외부 라이브러리의 버전을 통일하기 쉽습니다. 이로 인해 '의존성 지옥(Dependency Hell)'과 같은 복잡한 버전 충돌 문제를 피할 수 있습니다.
  • 향상된 협업 및 투명성:
    모든 개발자가 전체 코드베이스에 접근할 수 있어 팀 간의 협업이 원활해지고, 다른 팀의 작업을 쉽게 확인하며 지식을 공유할 수 있습니다.
  • 통합된 개발 환경 및 도구:
    모든 프로젝트에 동일한 빌드, 테스트, 배포 도구를 적용하기 용이하여 개발 환경을 표준화하고 유지보수 비용을 절감할 수 있습니다.

단점 및 고려사항

도입 시 신중한 고려가 필요

  • 저장소 크기 및 성능 저하:
    프로젝트 수가 늘어날수록 저장소의 전체 크기가 커져 처음 저장소를 복제(clone)하는 데 시간이 오래 걸릴 수 있으며, Git과 같은 버전 관리 시스템의 성능에 영향을 줄 수 있습니다.
  • 빌드 및 테스트 시간 증가:
    코드베이스가 커짐에 따라 모든 프로젝트를 빌드하고 테스트하는 데 걸리는 시간이 길어질 수 있습니다. 이를 해결하기 위해 영향을 받은 프로젝트만 선택적으로 빌드하는 등의 최적화된 도구(예: Bazel, Nx)가 필요합니다.
  • 복잡성 증가:
    저장소 내의 프로젝트가 많아질수록 전체 구조를 파악하고 관리하는 것이 복잡해질 수 있습니다. 명확한 디렉토리 구조와 규칙 설정이 중요합니다.
  • 접근 제어의 어려움:
    기본적으로 모든 코드에 대한 접근이 가능하므로, 특정 프로젝트에 대한 접근 권한을 세밀하게 제어하기 어려울 수 있습니다.

모노레포 vs 폴리레포

구분모노레포 (Monorepo)폴리레포 (Polyrepo)
저장소 구조여러 프로젝트를 하나의 저장소에서 관리프로젝트마다 별도의 저장소 사용
코드 공유매우 용이패키지 매니저를 통한 버전 관리 필요
의존성 관리단일화 및 간소화프로젝트별로 개별 관리, 버전 충돌 가능성
변경 관리원자적 커밋으로 여러 프로젝트 동시 변경여러 저장소에 걸쳐 개별적인 커밋 및 PR 필요
팀 자율성낮음 (통일된 표준 강조)높음 (팀별로 독립적인 개발 방식 가능)
대표적인 장점코드 재사용성, 일관성, 간소화된 협업독립적인 개발 및 배포, 작은 저장소 크기

모노레포를 사용하는 대표적인 기업

거대 테크 기업들을 중심으로 많은 곳에서 모노레포의 장점을 활용하고 있습니다.

  • 구글 (Google): 거의 모든 소프트웨어의 소스 코드를 거대한 단일 모노레포에서 관리하는 것으로 유명합니다. 이를 위해 자체 버전 관리 시스템인 '파이퍼(Piper)'와 빌드 시스템 '바젤(Bazel)'을 개발했습니다.
  • 메타 (Meta / 구 Facebook): 페이스북, 인스타그램 등 주요 서비스의 코드를 모노레포에서 관리하며 빠른 개발 속도와 팀 간 협업을 도모하고 있습니다.
  • 마이크로소프트 (Microsoft): 윈도우(Windows), 오피스(Office)와 같은 대규모 프로젝트에서 모노레포를 사용하여 코드베이스의 일관성과 협업 효율성을 높이고 있습니다.
  • 트위터 (Twitter): 여러 핵심 서비스를 모노레포 환경에서 개발하고 있습니다.

결론적으로 모노레포는 여러 프로젝트가 긴밀하게 연관되어 있고, 코드 공유와 일관성 있는 개발 문화가 중요한 대규모 조직 및 프로젝트에 강력한 이점을 제공하는 개발 전략입니다. 하지만 성공적인 도입을 위해서는 그에 따른 기술적, 문화적 과제를 해결하기 위한 노력이 동반되어야 합니다.

profile
pasongsong gayeon tak!

0개의 댓글