May 29, 2022
Monorepo는 잘 정의된 관계를 가진 여러 개의 구별된 프로젝트를 포함하고 있는 하나의 저장소이다. 저장소에는 두 개 이상의 코드가 저장되어 있다.
처음에는 모노레포를 단순히 하나의 레포지토리 안에 여러 모듈이 들어있는 게 아닌가 생각해서 하나의 모듈을 쓰기 위해 전체 모듈을 불러와 사용하고 모든 의존성이 동일해야 하는 방식이 비효율적이지 않나 생각했었다. 하지만 모노레포는 단순히 하나의 레포지토리에 모든 것을 몰아넣는 방식이 아니라 프로젝트 세팅과 의존 모듈을 공통으로 편리하게 관리할 수 있으면서 사용할 때는 개별적으로 불러 쓸 수 있는 것이라고 한다.
멀티레포는 모노레포와 반대되는 개념으로 여러 개의 저장소를 가지는 것을 의미한다.
기존에 이렇게 여러 개의 레포지토리를 유지하는 멀티레포 방식을 선택한 것은 팀의 자율성 때문이라고 한다. 각 레포지토리에서 세팅을 자유롭게 하고 각 레포지토리에 기여하는 사람을 달리하기 위해서였다. 나도 새로운 프로젝트를 생성할 때는 보통 멀티레포 형태로 생성하곤 하는데, 그룹에서 생성할 때는 레포지토리별로 오너십을 분리하기 위한 목적도 있는 것 같다.
멀티레포 방식의 여러 단점으로는 아래와 같은 것들이 있다.
모노레포 방식을 사용함으로써 얻는 이점으로는 다음과 같은 것들이 있다.
의존성을 필요에 따라 다르거나 같게 관리할 수 있다.
모노레포를 구축하기 위해 사용할 수 있는 툴이 여러가지 있는데 다음과 같은 것들이 있다.
새로운 프로젝트를 생성할 때의 번거로움을 해결하기 위해서나 일관성 있는 개발자 경험을 위해서는 공통 템플릿을 사용하는 것으로도 해결할 수 있을 것 같다. 하지만 한 곳에서 버저닝을 하고 코드의 공유와 재사용, 수정이 용이한 점 등이 모노레포 방식의 큰 장점인 것 같다. 다음엔 모노레포를 직접 구축해보고 싶다.