오랜만에 포스팅 남기네요. 새롭게 시작할 프로젝트 계약이 무산되고 어처구니없는 프로젝트에 투입되어 시간이 없었습니다 😰
이번 포스팅은 원티드에서 진행하는 프리온보딩 챌린지에 참여해 알게된 내용들입니다. 너무 일에만 치여지내다 보니 업계 동향이나 자기계발에 뒤쳐지고 있다 생각이 들었습니다. 그래서 회사 동료분들에게도 추천을 했고 다 같이 참여하는 시간을 갖게 되었습니다.
참여하기 전 사전과제로 해당 주제를 미리 공부해보는 시간을 가져야합니다. 주제는 모노레포 시스템입니다. 고맙게도 원티드에서 모노레포와 관련된 내용의 링크를 미리 첨부해주어 참고해 포스팅을 작성해보겠습니다.
시작하기 전 아래 내용은 프로젝트를 어떻게 하면 효율적으로 유지 관리하는 방법에 대한 지식입니다.
모노레포(Monorepo)
모노레포란?
버전 관리 시스템에서 두 개 이상의 프로젝트 코드가 동일한 저장소에 저장되는 소프트웨어 개발 전략
반대 개념인 멀티레포란?
콴다의 프론트엔드 팀에서 모노레포(MonoRepo) 도입 배경에 대해 설명한 부분이 있습니다. 전에는 모노레포의 반대인 멀티레포 방식으로 프로젝트를 운영했다고 합니다. 멀티레포(MultiRepo)는 말 그대로 프로젝트마다 각각의 레포지토리에 할당해 개발하는 전략입니다. 사실 저한테는 멀티레포가 더욱 친근한데요.
멀티레포에서 프로젝트가 많아질수록 생기는 문제는 아래와 같다고 합니다.
- 각 프로젝트들의 코드 컨벤션이 통일하기 어려워진다.
- 프로젝트별 사용하는 모듈 및 버전이 달라질 수 있다.
- 오랫동안 건드리지 않은 프로젝트는 관리하기 힘들고, 시간이 지날수록 레거시(Legacy) 파악이 어렵다.
- 팀원별 컨텍스트 공유가 서로 원활하지 않을 수 있다.
해당 문제들이 발생하게 된다는 데에는 어느 정도 공감이 갑니다. 현재 저희 회사 팀에서도 멀티레포 방식으로 프로젝트를 운영하고 있기 때문이죠 :)
제가 일하는 프론트엔드 팀은 총 4명이 한 팀으로 이루어져 있고 프로젝트 당 1명 에서 최대 2명까지 인원이 투입되어 개발을 했습니다. 시간이 자나고 프로젝트마다, 인원마다 개발 컨밴션이 너무나도 달랐고, 제가 팀 리더로 위치하면서 해당 문제를 해결하기 위해 Lint와 기본적인 개발환경 세팅이 적용된 Boilerplate Template을 도입했는데요.
멀티레포 방식으로 개발환경의 통합을 위해 Boilerplate Template를 만들어 둬 어느 정도 통일성을 유지했지만, 개발환경이나 모듈 업데이트가 되면 모든 프로젝트들을 개별적으로 업데이트해야 하는 불편함이 있어 효율적이진 않습니다.
이렇듯 보일러 플레이트를 도입해도 하나의 레포지토리라서 멀티레포의 단점을 모두 커버할 수 없었습니다. 멀티레포는 당장 편하고 빠른 퍼포먼스를 보일 수 있으나 장기적으로 팀 규모가 커졌을 땐, 전체적으로 퍼포먼스르 악화시키는 요소입니다.
멀티레포의 반대 개념으로 보았을 때 모노레포가 무엇인지 대략적으로 감이 오는데요. 더욱 자세한 건 챌린지를 통해 배워보도록 하겠습니다.