-
Monorepo vs MultirepoInfra/Architecture 2025. 1. 20. 22:12
현재 회사에서 운영중인 여러 서비스를 과거에 monorepo로 구성하며 겪은 과정과 내용을 정리하게 되었습니다. 서비스 운영시 repository 관리에 참고하면 좋을것 같습니다.
Monorepo vs Multirepo
출처: https://vikasg11.medium.com/mono-vs-multi-repository-94c1618cc9c9 개발 시 여러 모듈 또는 서비스를 하나의 repository에서 관리할 것인지 여러 repository에서 관리할 것인지에 따라 monorepo와 multirepo로 나누어집니다.
Monorepo
Monorepo 방식은 하나의 repository에서 두 개 이상의 모듈 또는 서비스를 개발 및 관리하는 방식입니다. 각각의 모듈과 서비스를 구성하는 package는 서로 의존성을 가지며 구성됩니다. 따라서 package들끼리 의존성을 가지지 않으면 monorepo라고 하긴 어렵습니다.
Monorepo 장점
- package로 구성된 모든 모듈과 서비스들은 무결성을 보장받습니다. 이는 지속적인 소스의 무결성을 보장한다는 것을 뜻하며 항상 모든 모듈과 서비스들이 연동된 올바른 상태를 유지합니다.
- 통합된 버전 관리가 가능합니다. 모든 모듈과 서비스들이 연동되어 하나의 버전으로 관리 가능합니다.
- 소스 단위의 연동이 이루어진 상태로 코드의 공유와 재활용성이 증가합니다.
- 의존 관계를 하나의 repository에서 확인 및 설정이 가능하기 때문에 의존성 관리가 쉽습니다.
- 하나의 repository에서 모든 모듈과 서비스의 코드 리뷰 및 작업을 진행하여 협업에 용이합니다.
- 통합 CI 및 테스트 구성이 쉽습니다.
Monorepo 단점
- 의존성 연결이 쉬워 무분별한 의존성으로 인해 과도한 의존 관계가 나타날 수 있습니다.
- 하나의 repository에서 모든 모듈과 서비스를 관리하다 보니 repository의 크기가 커질 수 있으며 그에 따라 repository hook 기반으로 동작하는 도구들의 속도(CI 속도)가 늦어질 수 있습니다.
Multirepo
Multirepo 방식은 여러 모듈과 서비스들을 각각의 repository로 개발 및 관리하는 방식입니다.
Multirepo 장점
- repository 별로 오너를 지정하여 강한 오너십을 가질 수 있습니다.
- repository 분리로 서로의 코드가 깨질 가능성이 적습니다.
- repository가 monorepo에 비해 가벼워 repository hook 기반으로 동작하는 도구들의 속도(CI 속도)가 상대적으로 빠릅니다.
Multirepo 단점
- 코드의 재활용성이 떨어지며 이에 따라 코드의 중복성이 커지며 다른 repository의 코드 사용을 위해 추가적으로 작업이 필요합니다.
- 하나의 피쳐 개발에 여러 repository에 merge 해야 합니다.
- 각 repository마다 코드 리뷰를 진행해야 하므로 관리 포인트가 늘어납니다.
- 하나의 브레이킹 체인지가 의존성을 가지는 다른 repository에 즉시 반영되지 않아 버전 연동이 깨질 위험이 있습니다.
- 하나의 프로젝트 규모가 커질수록 의존 그래프가 매우 복잡해져 디펜던시 헬(Dependency Hell)이 발생합니다.
이상 monorepo와 multirepo 방식에 대해 살펴보았습니다. 사실 저는 repository를 monorepo 방식으로 구성할 때 dependency 관리와 재활용성을 제외한 나머지 내용들을 세세하게 살펴보진 않았지만 각각의 장단을 잘 알아보고 맞는 방식을 택해서 구성하면 되겠습니다.
마무리
기존 multirepo 방식에서 monorepo 방식으로 바꾸어야겠다는 큰 이유는 패키지 dependency 관리 용이와 코드의 재활용성 때문이었습니다. 공용으로 사용 중이던 특정 모듈의 dependency 버전이 host 서비스에서 충돌이나 장애를 발생시켰던 일이 있었고, 여러 서비스에서 사용 중인 특정 모듈을 공용으로 사용하기 위해 monorepo를 선택하게 되었습니다.
각자의 상황에 맞게 repository를 잘 구성하여 운영하면 되겠습니다.
참고 자료
https://vikasg11.medium.com/mono-vs-multi-repository-94c1618cc9c9
https://tech.buzzvil.com/handbook/multirepo-vs-monorepo/
https://velog.io/@resyve/MONOREPO-MULTIREPO