협업이 쉬운 Git 구조, 모노레포 vs 멀티레포 무엇이 맞을까?

User avatar placeholder
Written by 노퇴근

6월 12, 2025

요즘 팀 프로젝트 하다 보면 이런 고민, 진짜 많이 들어요.
“서비스도 늘고, 앱도 여러 개 생기는데… 저장소를 하나로 계속 끌고 가도 괜찮을까?”
처음엔 하나의 GitHub 저장소에서 다 같이 작업하니까 편했는데,
파일이 많아지고 CI/CD 설정도 꼬이다 보니 슬슬 ‘모노레포 vs 멀티레포’ 고민이 시작되더라고요.

저도 그랬습니다. 혼자 개발할 땐 신경 안 쓰다가, 팀 3~5명쯤 되니까 바로 문제가 튀어나오더라고요.
브랜치 충돌, 테스트 속도, PR 병합 순서… 하나하나가 다 협업 생산성과 직결되는 요소더라고요.

그래서 이 글에선, 저처럼 “어디까지 하나로 가져가야 하지?” 고민하는 분들을 위해
모노레포와 멀티레포의 차이, 장단점, 전환 타이밍, 실전 구조 예시까지 정리했습니다.

개발 경험이 많지 않아도 이해할 수 있게, 마트 비유부터 git 명령어 실습까지 차근차근 담았으니
당장 구조 고민 중이라면 이 글로 한번 정리해보세요!

📌 모노레포 vs 멀티레포개념 정의

  • 모노레포(Monorepo):
    여러 프로젝트(서비스)의 코드를 하나의 저장소에서 함께 관리하는 방식이에요.
  • 멀티레포(Multirepo):
    프로젝트나 서비스마다 각자 다른 저장소를 사용하는 방식이에요.

🪄 모노레포 vs 멀티레포 비유 (쉽게 생각해봐요!)

  • 모노레포대형 마트 하나에 모든 물건이 있는 것과 같아요.
    한 군데만 가면 필요한 걸 다 살 수 있어요. 효율적이고 빠릅니다.
  • 멀티레포과일가게, 빵집, 정육점처럼 각각 따로 운영되는 시장이에요.
    전문화는 잘 돼 있지만, 여러 군데를 돌아다녀야 해요.

💡 사용 예시 (실제 폴더 구조)

모노레포 구조 예시

project-root/
├─ core/ # 핵심 기능 모듈
│ ├─ module1/
│ ├─ module2/
│ └─ ...
├─ apps/ # 사용자-facing 앱들
│ ├─ app1/
│ ├─ app2/
│ └─ ...
├─ shared/ # 공통 코드
│ ├─ security/
│ └─ quality/
├─ infra/ # 배포, 도커 등 인프라 설정
├─ .github/
│ └─ workflows/ # GitHub Action 자동화 설정
└─ tasks.json # 작업 관리용 설정 파일

Git 브랜치 전략 예시

브랜치설명
main안정적인 버전, 실제 배포에 사용
dev여러 기능을 통합해서 테스트하는 브랜치
feat/새로운 기능 작업용 개인 브랜치 → dev에 머지 (PR)

🔄 멀티레포로 자연스럽게 전환하는 단계

  1. 특정 앱이 별도 팀에서 관리되면, 그 앱 폴더만 따로 새 저장소로 분리 bash복사편집git filter-repo --subdirectory-filter apps/app1 --force
  2. 공통 코드는 shared/ 디렉토리를 내부 패키지나 서브모듈로 분리해서 재사용
  3. 각 앱마다 자체적으로 CI/CD 자동화 구성 (서로 독립적으로 배포 가능하게)

🧠 어디서 쓰이나? (각 방식의 장단점)

✅ 모노레포가 유리한 경우

  • 프로젝트 시작 단계
  • 팀 규모가 작을 때 (2~5명)
  • 기능들이 서로 자주 영향을 줄 때
  • 테스트 및 수정 작업을 빠르게 하고 싶을 때

✅ 멀티레포가 유리한 경우

  • 프로젝트가 커지고, 서비스끼리 완전히 독립적일 때
  • 여러 팀이 나눠서 병렬적으로 개발할 때
  • 서비스마다 배포나 보안 권한을 따로 관리해야 할 때

✅ 기억 꿀팁 한 줄 요약!

초기엔 한방에(모노), 커지면 나눠서(멀티)!

🚀 지금 당장 써먹는 실행 절차 (실습용 예시)

(1) GitHub 저장소 만들기 + 초기화

gh repo create my-monorepo --private
cd my-monorepo && git init

(2) 폴더 구조 스캐폴드 생성 & 첫 커밋

git add .
git commit -m "chore: initial scaffold with core & apps"
git push -u origin main

(3) GitHub Actions 자동 테스트 설정 (.github/workflows/ci.yml)

name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install -r requirements.txt
- run: pytest

(4) VSCode 작업공간 설정

  • .code-workspacecore/, apps/ 폴더를 포함시켜서 검색과 테스트를 한 번에 하게 설정

(5) 릴리즈 태그 달기

git tag -a v0.1.0 -m "MVP scaffold"
git push origin v0.1.0

이제 모노레포로 시작해서 편하게 관리하고,
규모가 커질 땐 멀티레포로 자연스럽게 전환하면 됩니다! 😄

Image placeholder

본 블로그외에도 sns 채널에서 다양한 정보를 확인해볼 수 있습니다.

© 노퇴근 | let’s 귤팁
감정을 회복하는 철학이, 기술보다 먼저입니다.

당신의 흔적을 남겨주세요.

🫧 짧은 한마디도 좋아요. 당신의 생각을 들려주세요.

목차