배경
- 그동안 프로젝트를 여럿 거치면서 프론트엔드부터 Node.js 백엔드까지 여러 JavaScript 프로젝트에서 다양한 모노레포 설정을 해왔어요.
- 많은 시행착오와 함께 여러 프로젝트에 흩어져 있는 도구들이 제가 성장했다는 증거로 느껴지기도 하는데요. 모노레포 설정에 힘들어하는 다른 분들께 도움을 드리고자, 제가 경험했던 내용을 정리해서 공유드리려고 해요.
모노레포는 무엇일까요?
모노레포는 여러 패키지, 프로젝트를 한 레포에 담는 걸 의미해요. 다양한 프로젝트를 한 레포에서 관리하는 것에는 다양한 이유가 있는데요. 바로 패키지와 프로젝트 간의 의존성 관계를 쉽게 관리할 수 있기 때문입니다.
예를 들면,
- 우리 팀에 A, B, C 프로젝트가 있고,
- A, B, C 프로젝트 간에 공통으로 사용되는 P, Q라는 라이브러리가 있고,
- P와 Q는 K라는 라이브러리를 사용한다고 가정해보겠습니다.
그러면,
- P라는 라이브러리가 수정되면, K, Q를 제외한 P, A, B, C 프로젝트가 순서대로 빌드되어야 합니다.
다음과 같이 패키지 간 의존성이 엮이면 엮일수록 의존성의 변경 사항에 대한 추적이 점점 더 복잡해지고 어려워지게 되는데요. 해당 관계에 대한 정보가 여러 Git 레포에 흩어지게 되면 어떨까요? 각자의 작업물이 온갖 브랜치들이 난립하면서 추적하기 굉장히 어려워질 것 같습니다. 따라서, 한 레포에 해당 패키지들을 모두 포함해 버전 관리를 하는 시도들이 나오게 되었습니다. 이것을 모노레포라고 부릅니다.