Monorepo
이번 글에서는 Monorepo가 무엇인지, 그리고 장점과 단점들에 대해서 알아보겠습니다.
What is Monorepo?
Monorepo란 별개의 프로젝트 여러개를 하나의 레포지토리로 관리하는 것을 의미합니다. 프로젝트들은 관련되어 있지만, 논리적으로 독립적이며 별개의 팀들에 의해 개발될 수 있습니다.
Why Monorepo?
왜 모노레포를 사용하느지에 대해 알기 위해 모노레포에 반대되는 개념인 'Polyrepo'에 대해 알아보겠습니다. Polyrepo는 통상적으로 많이 사용되는 애플리케이션 개발 방식입니다. 하나의 팀, 하나의 프로젝트 혹은 하나의 애플리케이션마다 하나의 레포를 가지며, 하나의 빌드 파이프라인을 가집니다. Polyrepo를 사용하는 이유는 바로 팀 자율성 때문입니다. 하나의 팀이 자신의 프로젝트에 대해 어떤 라이브러리를 사용할지, 언제 배포할 지 등 결정을 내릴 수 있기 때문입니다.
그렇다면 왜 Polyrepo의 단점은 무엇일까요? 팀의 자율성은 각 프로젝트를 고립시키게 되고, 이는 결국 협업을 방해합니다. 더 구체적으로 설명하자면, Polyrepo 환경은 다음의 단점을 지닙니다.
- 코드 공유가 번거롭습니다. 여러 프로젝트에서 동일한 코드를 사용하고자 한다면 해당 코드를 위한 레포를 또 생성하고, 배포 환경을 구축하고 등등...
- 따라서 프로젝트가 진행되고 서비스가 추가/변경되면서 유지보수 비용, 보안, 코드 품질에 대한 문제가 일어납니다.
- 프로젝트마다 사용하는 툴이 다른 경우 mental overhead가 발생합니다.
그렇다면 Monorepo를 사용하면 어떻게 이런 문제들을 해결할 수 있을까요?
- 새로운 프로젝트 생성시 overhead가 적습니다. 기존의 CI 설정을 그대로 사용할 수 있으며, 같은 레포에 위치하기 때문에 패키지 배포 등의 작업이 필요없습니다.
- 한 번의 커밋으로 변경사항을 적용할 수 있습니다. 모든 프로젝트들에 대해서 하나의 레포를 사용하기 때문에 수정사항이 있는 경우 하나의 커밋으로 모든 프로젝트들에 대해 적용할 수 있습니다.
- 써드 파티 라이브러리를 하나의 버전으로 사용하기 때문에 버전 차이에 의한 호환성에 대해서 걱정하지 않아도 됩니다.
- 코드 스타일에 대해서 공유된 룰을 적용하여 개발할 수 있습니다.
Why not Monorepo?
Monorepo는 매력적인 방식이긴 하지만, 다음과 같은 단점도 있습니다.
- 모노레포는 scale up하기 어렵습니다. 프로젝트가 방대해지면 성능이 안좋아집니다.
- Main, Master 브랜치가 잘못된 경우 모든 프로젝트가 영향을 받을 수 있습니다.
- 학습 곡선이 가파릅니다.
'개발 용어 정리' 카테고리의 다른 글
| HTTP Cache Control (0) | 2023.05.07 |
|---|---|
| 컴포넌트 주도 개발(Component-Driven Development)이란? (0) | 2023.01.29 |