728x90
1.Monorepo (모노레포)
여러 프로젝트(서비스, 패키지, 라이브러리 등)를 하나의 리포지토리에서 관리하는 방식으로
하나의 Git 리포지토리에서 모든 코드베이스를 운영한다.
/monorepo
├── apps
│ ├── frontend (React App)
│ ├── backend (Node.js API)
│ └── mobile (React Native App)
├── packages
│ ├── ui-library (공통 UI 컴포넌트)
│ ├── utils (공통 유틸리티 함수)
│ └── config (공통 설정)
├── .git
├── package.json
├── README.md
하지만 리포지토리가 커질수록 성능 저하가 일어나고 하나의 레포지토리로 관리하기 때문에 일부 변경 사항만 빌드하는 설정이 필요할 수 있다. 또한 많은 개발자가 동시에 작업할 경우, 병합 충돌이 자주 발생하는 문제가 있을수있다.
2.Multi-repo (멀티레포)
각 프로젝트를 독립적인 Git 리포지토리로 관리하는 방식으로 각각의 리포지토리에서 개별적으로 관리한다.
프로젝트별 독립성을 보장받아 다른 프로젝트에 영향을 받지않고 특정 프로젝트만 업데이트해도 전체 시스템에 영향을 미치지 않기때문에 필요한 서비스만 개별적으로 빌드 및 배포가 가능하다.
리포지토리가 작아서 속도가 빠르고, Git 충돌 발생 확률이적어진다.
github.com/company/frontend
├── src
├── package.json
├── README.md
github.com/company/backend
├── src
├── package.json
├── README.md
github.com/company/utils
├── src
├── package.json
├── README.md
하지만 프로젝트가 여러 개일수록 CI/CD 설정이 많아지고, 배포 과정이 복잡해질 수 있고 여러 프로젝트에서 변경이 필요할 때, 각 리포지토리마다 따로 커밋해야 하므로, 프로젝트 간 동기화가 어려울 수 있다.
3.방식 선택
3-1.Monorepo
- 대규모 프로젝트에서 여러 팀이 협업하며 공통 코드 공유가 필수적인 경우.
- 프론트엔드 + 백엔드 + 모바일 + 공통 라이브러리를 하나의 리포지토리에서 관리하고 싶은 경우.
- 프로젝트 간 변경 사항을 원자적으로(Atomic) 관리해야 하는 경우.
3-2.Multi-repo
- 독립적으로 운영되는 프로젝트가 많고, 각 서비스가 개별적으로 배포되어야 하는 경우.
- 작은 규모의 프로젝트를 여러 개 관리하는 경우.
- 특정 팀이나 서비스별로 권한을 분리해야 하는 경우.
728x90
'Development Tools > GIT,GITHUB' 카테고리의 다른 글
[Git] GitLab이란? (0) | 2025.02.09 |
---|---|
[Github] Github Actions란?, 사용법 (0) | 2025.02.07 |
[GITHUB] Github License (0) | 2025.01.13 |