seungjun.dev

모노레포

프로젝트 관리 방식 중 하나인 모노레포에 대해 정리

단일(Mono) 저장소(Repository)

  • 관련 있는 여러 프로젝트의 소스 코드를 단 하나의 Git 저장소에서 모두 관리하는 방식
우리팀_프로젝트/  <-- 하나의 Git 저장소
├── 📂 frontend/
│   ├── package.json
│   └── src/
├── 📂 backend/
│   ├── package.json
│   └── src/
└── package.json

장점

원자적 커밋

  • 하나의 기능이 FE와 BE 양쪽의 변경을 모두 필요로 할 때, 관련된 모든 변경사항을 하나의 커밋으로 묶을 수 있음
  • 이를 통해 코드 변경의 히스토리를 이해하기 쉽고, 문제가 생겼을 때 이전 상태로 되돌리기도 간편해짐

통일된 개발 환경과 표준화

  • 모든 프로젝트가 하나의 저장소에 있으므로, ESLint와 Prettier, 테스트 도구 등을 한 번만 설정하면 됨
  • 전체 프로젝트의 코드 스타일과 품질을 일관되게 유지하는 데 큰 도움이 됨

간소화된 의존성 관리

  • 프로젝트 전체에서 사용하는 라이브러리의 버전을 하나로 통일하기 쉬움

모노레포 vs 폴리레포

모노레포의 반대 개념은 폴리레포(Polyrepo) 또는 멀티레포(Multi-repo)라고 부른다. 이는 프로젝트마다 별도의 Git 저장소를 만드는 것을 의미한다.

특징모노레포 (Monorepo)अलग 폴리레포 (Polyrepo)
저장소 구조하나의 저장소에 모든 프로젝트프로젝트마다 개별 저장소
코드 공유매우 쉬움 (단순히 파일 경로로 참조)별도의 패키지로 만들어 배포/설치해야 함
의존성 관리단일 버전으로 관리 용이각 프로젝트가 다른 버전을 가질 수 있어 충돌 가능
변경 작업여러 프로젝트에 걸친 변경을 한번에 커밋 가능여러 저장소에 각각 커밋 및 PR 필요
빌드/배포설정이 복잡할 수 있음 (특정 프로젝트만 빌드해야 함)프로젝트별로 빌드/배포가 명확하고 독립적임
팀 자율성코드 표준화 및 일관성 유지에 유리각 팀이 독립적으로 기술 스택이나 라이브러리 선택 가능
저장소 크기프로젝트가 많아질수록 저장소 크기가 커짐저장소 크기가 작고 가벼움

언제 모노레포를 쓰는 게 좋을까?

모노레포는 여러 프로젝트가 서로 긴밀하게 연결되어 있고, 코드 공유가 많을 때 매우 강력한 힘을 발휘한다. 특히 풀스택 프로젝트나 마이크로서비스 아키텍처(MSA)의 초기 단계에서 팀 전체의 생산성을 높이는 데 효과적이다.

반면, 프로젝트들이 완전히 독립적이거나 팀별로 자율성을 극대화하고 싶을 때는 폴리레포 방식이 더 적합할 수 있다.

지금 진행하는 풀스택 프로젝트처럼 프론트엔드와 백엔드가 긴밀하게 소통해야 하는 경우, 모노레포가 아주 적합하다.