모노레포 vs 멀티레포

problem_hun·2023년 5월 11일
0

TIL

목록 보기
10/10
post-thumbnail

원티드 5월 프론트엔드 챌린지를 하면서 모노레포에 대해 알게 되었다. 모노레포란 무엇인지, 이와 반대되는 멀티레포는 무엇인지 알아보자.


모노레포

개념

프로젝트별로 레포지토리를 생성하여 만드는 멀티레포와 반대되는 방식으로, 버전 관리 시스템에서 두 개 이상의 프로젝트 코드가 동일한 저장소에 저장되는 소프트웨어 개발 전략이다. 모노레포의 대표적인 예시로는 구글, 페이스북 등의 대규모 기업들이 있다. 한국에서는 토스가 대표적이다. 이들 기업은 대규모 프로젝트를 다루기 위해 코드를 단일 저장소에서 관리하고 있다.

장단점

장점

  • 코드 리뷰 향상 : 각 프로젝트의 작업 사항을 하나의 Repository에서 한눈에 확인할 수 있으니, 자연스레 다른 프로젝트의 코드를 들여다보며 코드 리뷰에 적극 참여할 수 있는 계기가 만들어진다.

  • 최신화 상태 유지 : 멀티레포 환경에서 수많은 프로젝트로 인해 오래 건드리지 않던 프로젝트가 Legacy 화가 되어 왔으나, 모노레포를 통해 한층 더 신경 쓸 수 있는 환경으로 개선시킬 수 있다.

  • 전체 코드의 일관성 : 하나의 저장소에서 모든 코드를 관리하기 때문에, 코드의 일관성을 유지하기가 더욱 쉬워진다. 특히 각 프로젝트별로 align이 되지 않던 eslint와 prettier의 환경을 모든 팀원이 동일한 코드의 컨벤션을 가져갈 수 있게 된다.

  • 공유 라이브러리 : 모노레포는 여러 프로젝트에서 공유되는 라이브러리를 관리하는 데 적합하다.

  • 단일 버전 관리 : 모노레포에서는 모든 코드가 하나의 버전 관리 체계에서 관리되기 때문에, 버전 충돌 문제를 최소화할 수 있다.

단점

  • 개발환경 구성의 어려움 : 여러 프로젝트와 의존성을 모두 관리하는 것은 복잡성이 높기 때문에 처음 모노레포 구조를 만듦에 있어서 어려움이 있을 수 있다.

  • 높은 학습 곡선 : 단일 저장소를 사용하는 새로운 개발자는 전체 코드베이스와 서로 다른 구성 요소 간의 상호 종속성을 이해해야 한다. 특히 주니어 개발자나 프로젝트를 처음 접하는 사람들에게는 어려운 작업이 될 수 있다. 그 결과 새로운 개발자를 온보딩하는 것이 더 어렵고 시간이 많이 소요될 수 있습니다.

  • 코드 충돌 위험 : 단일 저장소에서 여러 개발자가 동일한 코드베이스의 서로 다른 부분에서 동시에 작업할 수 있다. 이로 인해 개발자가 동일한 코드를 변경하면 충돌이 발생할 수 있다. 적절한 의사 소통과 조정이 없으면 개발 프로세스가 크게 지연될 수 있다.

  • 코드 관리 복잡성 : 모든 코드가 하나의 저장소에서 관리되기 때문에, 저장소의 크기가 커질수록 코드 관리 복잡성이 증가한다.

  • 배포 복잡성 : 모든 코드가 하나의 저장소에서 관리되기 때문에, 배포 프로세스가 더 복잡해질 수 있다.


멀티레포 (폴리레포)

개념

폴리레포(polyrepo) 구조라고도 부른다. 멀티레포란 말 그대로 Repository를 각 도메인 및 기능 시스템 단위로 생성하여 운영하는 것을 말하는데, 우리가 보통 프로젝트별로 레포지토리를 생성하여 만든 것을 말한다.
각 프로젝트가 고유의 저장소를 가지게 됨으로써, 다른 프로젝트와의 의존성을 가지고 있지 않아 독립적으로 빠르게 개발이 가능하며 비교적 크기가 가벼워 프로젝트 관리 면으로 수월하다.

장단점

장점

  • 모듈화 : 각 저장소가 독립적으로 관리되기 때문에, 개발자는 필요한 모듈만 가져와서 작업할 수 있다. 프로젝트의 규모가 커질수록 유지보수성이 높아지는 것을 뜻한다.

  • 배포 : 멀티레포는 전체 프로젝트를 빌드하거나 배포할 필요 없이 일부분만 변경하거나 배포할 수 있다. 대규모 프로젝트에서 프로덕션 배포의 속도를 높이는 데 도움이 된다.

  • 더 나은 협업 : 각각의 저장소는 작은 단위로 관리되기 때문에, 여러 개발자들이 동시에 작업할 때 충돌을 최소화할 수 있다. 또한 개별 저장소가 다른 저장소와 더 쉽게 협업할 수 있도록 서로 분리되어 있다.

  • 테스트 : 각 저장소는 독립적으로 테스트할 수 있기 때문에, 테스트를 효율적으로 수행할 수 있다.

  • 의존성 관리 : 각 저장소는 개별적으로 관리되기 때문에, 프로젝트의 의존성 관리가 더욱 쉬워진다.

단점

  • 멀티레포는 저장소의 수가 많아질수록 관리가 복잡해진다. 각 저장소에 대한 버전 및 의존성 관리가 필요하며, 이는 추가적인 노력과 시간이 필요하다.

  • 멀티레포에서는 각각의 저장소에서 동일한 코드가 중복될 수 있다. 이는 코드의 수정이 필요할 때 수정해야 하는 저장소가 여러 개일 수 있으므로 유지보수성이 낮아질 수 있다.

  • 각 프로젝트의 코드 컨벤션이 통일하기가 어려워질 수 있다.

  • 각 프로젝트별로 사용하는 모듈 및 버전 스택이 달라질 수 있다.

  • 오랫동안 건드리지 않은 프로젝트의 관리가 힘들어지며, 시간이 지날수록 해당 프로젝트의 Legacy 파악이 어려워질 수 있다.

  • 팀원별 컨텍스트 공유가 서로 원활하지 않을 수 있다.


참조 페이지

팀워크 향상을 위한 모노레포(Monorepo) 시스템 구축
[ETC] Monorepo - 개념

profile
문제아

0개의 댓글