MonoRepo

hoyong.eom·2024년 10월 12일

자바

목록 보기
2/5
post-thumbnail

📒MonoRepo

MonoRepo는 Monolithic Repositories의 약자로, 하나의 리포지토리에서 여러개의 프로젝트를 구성하는것을 의미한다.

일반적으로는 하나의 리포지토리 안에 하나의 프로젝트가 들어 있는것이 일반적이다. 이러한 형태의 프로젝트 구성을 MultiRepo 혹은 PolyRepo라고 한다.

MonoRepo이 나타낸 배경과 필요성을 이해하기 위해서 프로젝트 시작부터 MonoRepo까지의 변화 과정을 공부해보려고 한다.

📌 1. 초기 프로젝트 구조

일반적으로 프로젝트 초기에는 Monolithic 형태로 서비스를 구성한다.
왜냐하면 프로젝트의 크기가 크지 않기 때문에 한 곳에서 처리하는것이 효율적이기 때문이다.
따라서, 하나의 리포지토리에서 모든 서비스를 구현하게 된다.

📌 2. 마이크로 서비스 구성

프로젝트가 커지면서 Monolithic 형태의 프로젝트는 여러 가지 문제를 발생시킨다.

아무래도 가장 큰 문제는 코드에서 높은 결합도와 낮은 응집도를 갖아 수정이 어려워질것이다.

이 문제를 해결하기 위해서 프로젝트를 여러 서비스로 분리할것이고, 각각의 서비스를 하나의 리포지토리에서 관리할지 서로 다른 리포지토리에서 관리할지 결정해야 한다.

📌📌 2.1 MultiRepo(PolyRepo)

각각의 서비스를 여러개의 리포지토리로 나눠서 관리하는 방식을 MultiRepo(PolyRepo)라고 부른다.

서비스 별로 리포지토리를 만들어서 관리하며 그에 장점과 단점은 아래와 같다.

장점

  • 리포지토리 별로 담당자를 지정할 수 있어 서비스 고유 담당자를 지정할 수 있다.
  • 서비스 별로 리포지토리가 나뉘어 있어 코드 충돌이 발생할 확률이 낮다.

단점

  • 리포지토리가 분리되어 있어 코드 재상이 쉽지 않아 중복 코드가 생성될 가능성이 높다.
  • 1개의 기능을 개발할때, 여러 리포지토리에 PR이 요청되어야 할 수 있다.
  • 여러 리포지토리에 PR이 요청될 경우 코드리뷰가 나눠어진다.
  • 리포지토리 버전 관리가 어렵다.

📌📌 2.2 MonoRepo

각각의 서비스를 하나의 리포지토리에서 관리하는 방식을 MonoRepo라고 부른다.
장점

  • 리포지토리는 항상 모든 서비스가 연동된 상태를 유지하기 때문에 소스 무결성이 보장된다.
  • 모든 서비스의 버전 관리가 용이한다.(하나의 버전 모든 서비스를 관리할 수 있다.)
  • 코드 재사용 용이
  • 테스트 용이
  • 코드리뷰 용이
  • 의존성 연결 용이

단점

  • 의존성 연결이 쉬워 무분별한 의존성 연결 발생 가능성이 높음

참고

https://velog.io/@sms8377/DevOps-MonoRepo%EB%9E%80
https://tech.buzzvil.com/handbook/multirepo-vs-monorepo/

0개의 댓글