# Monorepo에 대한 모든 것

> Clean Markdown view of GeekNews topic #6061. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=6061](https://news.hada.io/topic?id=6061)
- GeekNews Markdown: [https://news.hada.io/topic/6061.md](https://news.hada.io/topic/6061.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2022-02-28T11:50:12+09:00
- Updated: 2022-02-28T11:50:12+09:00
- Original source: [monorepo.tools](https://monorepo.tools/)
- Points: 23
- Comments: 4

## Topic Body

### Monorepo란 무엇인가   
- "여러 개의 개별 프로젝트를, 잘 정의된 관계를 통해서 하나의 Repo에 담은 것"  
- Monorepo ≠ Monolith  
### 왜 해야할까 ?  
- 기존의 Polyrepo(여러개의 Repo를 사용하던 방식)를 선택한 이유는 "팀 자율성(team autonomy)" 때문이었음  
  - 팀들이 각자 원하는 라이브러리를 선택하고, 누가 코드에 기여하고 사용하는 지를 결정하는게 가능  
- **PolyRepo**는  
  - 코드 공유가 번거로움   
  - 코드 중복이 많음  
  - 공유 라이브러리의 크리티컬 버그 및 큰 변경시 비용이 많이 듬  
  - 프로젝트별 일관되지 않은 개발도구 사용   
- **Monorepo**는  
  - 새로운 프로젝트를 생성하는 오버헤드가 없음   
  - 전체 프로젝트에 걸침 아토믹 커밋  
  - 모든 것을 버전 번호 하나로 관리   
  - 개발자 모빌리티(프로젝트간 이동)  
### Monorepo 툴들이 제공하는 기능들과 각 도구간 비교   
→ Bazel, Gradle, Lage, Lerna, Nx, Rush, Turborepo  
  - 로컬 캐슁   
  - 로컬 태스크 오케스트레이션   
  - 분산 캐슁   
  - 분산 태스크 실행   
  - 투명한 리모트 실행  
  - 영향받는 프로젝트/패키지 감지   
  - 워크스페이스 분석  
  - 종속성 그래프 시각화  
  - 코드 공유   
  - 일관적인 툴링   
  - 코드 생성   
  - 프로젝트 제약 및 가시성   
### 인식의 전환   
> 모노레포는 여러분의 "**조직**과 **코드에 대해 생각하는 방식**"을 바꿉니다  
- 일관성을 추가하고,  
- 새 프로젝트 생성할 때나 대규모 리팩토링을 수행할 때 마찰을 줄이며,   
- 코드 공유 및 팀간 협업을 촉진함으로써  
- 조직이 보다 효율적으로 작업할 수 있음   
### 다양한 솔루션들이 있지만, 각자 목표가 다름   
- **Bazel** (by Google) : “A fast, scalable, multi-language and extensible build system.”  
- **Gradle** (by Gradle, Inc) : “A fast, flexible polyglot build system designed for multi-project builds.”  
- **Lage** (by Microsoft) : “Task runner in JS monorepos”  
- **Lerna** : “A tool for managing JavaScript projects with multiple packages.”  
- **Nx** (by Nrwl) : “Next generation build system with first class monorepo support and powerful integrations.”  
- **Rush** (by Microsoft) : “Geared for large monorepos with lots of teams and projects. Part of the Rush Stack family of projects.”  
- **Turborepo** (by Vercel) : “The high-performance build system for JavaScript & TypeScript codebases.”

## Comments



### Comment 9121

- Author: kleinstein
- Created: 2022-03-02T17:13:47+09:00
- Points: 2

응용 프로그램을 개발해서 고객사 마다 설치하다보면,   
어떤 고객사는 더이상 업그레이드를 원치 않을때도 있고,   
어떤 고객사는 그들만의 특별한 버전을 요구할때도 있어요.  
  
그래서 이런 고객사들이 늘어나다 보면,   
결국 Repository가 한 수십개의 고객사 맞춤 버전 branch 로 가득합니다.  
각 branch 마다 조금씩 다른 버전이 들어있어요.  
  
이런 상황에서 Monorepo 글을 보니까.. 정말 꿈같은 이야기처럼 들리네요. ㅎㅎ

### Comment 9075

- Author: bbulbum
- Created: 2022-02-28T20:07:33+09:00
- Points: 3

토발즈가 대부분의 상황에서 공유라이브러리는 좋은 생각이 아니라고 했던게 생각나네요.. 최근 적용해보고 있는데 생각보다 공유할만한 부분은 적고 빌드시스템이 꼬이는부분은 커서 저는 모노레포가 기대만큼 이상적인 시스템이 아니라는 생각..

### Comment 9070

- Author: galadbran
- Created: 2022-02-28T12:40:40+09:00
- Points: 1

subversion 이 대세이던 시절에는 그냥 너무 당연했던 일인데 뭔가 아이러니하다는 생각이 많이 들어요.   
 프론트엔드 개발만 한정해서 다뤄지는 것도 의아하고요.  
ms 에서 git 도 subversion 처럼 쓸 수 있게 가상파일시스템을 만들었는데 그게 일반화되지 않아서 슬프네요.

### Comment 9072

- Author: xguru
- Created: 2022-02-28T14:47:49+09:00
- Points: 3
- Parent comment: 9070
- Depth: 1

뭔가 요즘 보면 기술이 돌고 도는 느낌이 더 심하긴 해요.   
어 이거 예전에 별로 였던 그거 아냐? 라는 생각이 들 때가 있어서.. 너무 오래 굴렀나 싶어요. 흑흑
