monorepo(여러 프로젝트/서비스를 위한 하나의 repository)와 polyrepo(프로젝트마다 별도의 repository)는 여러 프로젝트에 걸쳐 코드를 조직하는 두 가지 전략입니다. 각각 협업, 도구, 확장에 영향을 미치는 상당한 트레이드오프가 있습니다 — 이를 이해하는 것이 중요한 아키텍처 결정을 내리는 데 도움이 됩니다.
monorepo — 모든 것을 위한 하나의 repo
여러 프로젝트/서비스/라이브러리를 단일 repository에:
✓ 공유 코드/라이브러리를 쉽게 사용하고 리팩터링(한 곳, 원자적 변경)
✓ 프로젝트 전반의 ATOMIC commit(API를 바꾸고 모든 소비자를 함께)
✓ 통합 도구, 버전 관리, CI; 일관된 표준; 쉬운 프로젝트 간 가시성
✓ 단순화된 의존성 관리(공유 코드의 하나의 버전)
✗ repo가 거대해질 수 있음(확장 도구 필요 — sparse checkout, 빌드 캐싱)
✗ 효율적이려면 정교한 빌드/CI 도구(Nx, Turborepo, Bazel) 필요
✗ 넓은 접근; CI가 똑똑해야 함(변경된 것만 빌드)
→ Google, Meta 등이 사용(무거운 도구 투자와 함께).
