모놀리식, 멀티레포, 모노레포의 차이

jade·2025년 2월 16일
0

typescript 스터디에서 모노레포에 관한 이야기가 나와서 어떻게 모노레포가 등장하게 되었는지(배경)과 이를 해결하기 위한 다른 방법(멀티레포) 그리고 앞선 두 개발전략의 어떤 점을 모노레포가 해결했는지에 대한 글을 작성하게 되었다.

1️⃣ 모노레포 이전 소프트웨어 개발 전략 : 모놀리식(monolithic)

모노레포가 등장하기 전에는 모놀리식기법을 사용했습니다.

모놀리식이란 단일 application 내에 서비스의 모든 로직이 통채로 들어가 있는 구조입니다. 마치 맥가이버 칼이 여러 공구를 하나의 몸통에 갖춘 것과 같습니다.

<모놀리식의 장점>

  • 모놀리식의 장점은 간결함입니다. E2E 테스트를 더 빠르게 수행할 수 있고, 하나의 앱에 비즈니스 로직, UI, 콘텐츠 등 구성요소가 모두 들어가 있어서 디버깅이 편합니다.
  • 소규모 애플리케이션에서는 단순하면서 견고한 구조를 만들 수 있습니다.

<모놀리식의 단점>

  • 모놀리식의 단점은 서비스 규모가 커질때 발생합니다. 단일 application이 커지면 빌드, 배포에 드는 시간이 오래걸리게 되겠죠
  • 시스템 구조를 제대로 파악하지 못한다면 특정 모듈에서 발생한 장애가 다른 영역에 큰 영향을 끼칠 수 있습니다.
  • 작은 부분을 수정해도 전체를 컴파일해서 배포해야 하므로 배포가 잦은 환경에서는 매우 번거롭습니다. -> 설계, 리팩토링, 배포의 단위가 큽니다.
  • 기술 유연성이 낮습니다.(기능별로 알맞은 언어, 프레임워크를 선택하기 까다롭습니다)

때문에 모놀리식 구조보다 효율적인 구조에 대한 필요성에 의해 폴리레포(멀티레포),모노레포에 방식이 등장하게 되었습니다.
-> 모놀리식과 마이크로서비스 아키텍처에 대한 비교글도 많으니 궁금하신분은 더 찾아보면 좋겠습니다

2️⃣ 더 알아본점 ( 멀티레포(mulirepo, polyrepo)와는 어떤 차이점이 있을까?)

모놀리식에서 각 모듈을 분리해서 고유한 저장소가 있는 독자적인 프로젝트로 만듭니다.

<멀티레포의 장점>

  • 각 프로젝트 (실무에서는 팀)별로 자율성이 높습니다. 독립적인 개발, 린트, 테스트, 빌드 , 배포 파이프라인을 구축할 수 있습니다.

<멀티레포의 단점>

  • 번거로운 프로젝트 생성
  • 패키지의 중복 코드 가능성
  • 관리해야할 대상 증가

3️⃣ 모노레포의 특징과 장단점

단순히 여러 프로젝트가 하나의 저장소를 사용한다고 모노레포라고 부르지 않는다. 프로젝트 간에 관계가 있어야 한다.

  • 의존성이 존재한다거나, 같은 제품군 이라거나.. 등
    모노레포 관리 도구들은 이러한 "관계"룰 효율적으로 관리해준다.

<모노레포의 장점>

  • 더 쉬운 프로젝트 생성 : 저장소 및 커미터 추가 과정이 없고 기존 개발환경설정, cicd, 빌드, 배포에는 기존 DevOps를 이용하면 됩니다.
  • 더 쉬운 의존성 관리: 공통 모듈이 같은 저장소 내에 있으므로 버전이 지정된 패키지를 Npm registery와 같은 곳에 publish하지 않아도 됩니다.
  • 테스트 및 빌드 범위 최소화 : (FT님이 말씀해주신 빌드 시간이 단축되는이유) 소스를 변경하게 되더라도 모든 프로젝트를 다시 빌드하거나 테스트 하지 않고, 영향을 받는 프로젝트만 다시 테스트&빌드 합니다.

<모노레포의 단점> -

  • code ownership위배 :서비스, 시스템, 모듈, 컴포넌트 등의 소유권은 단일 개발팀에. (각 코드에 대한 소유권, 변경 사항에 대한 책임이 단일 소유자(팀)에게 있도록 하는 것이 코드 관리에 더 도움이 된다는 입장)
  • 대규모 리팩터링이 쉬워지는 장점이자 단점 : 거대한 프로젝트에서 팀 경계를 넘나드는 대규모 리팩토링은 위험할 수 있다. (여러 단계를 거치면서 각 레포지토리에 대한 Ownership을 가진 팀의 승인을 받아 진행하는 것이 좋을 수도 있다.)

참고자료

https://d2.naver.com/helloworld/0923884
https://www.inflearn.com/pages/infcon-2023-tech-msa?gad_source=1&gclid=CjwKCAiAtsa9BhAKEiwAUZAszUw9jUTvCSYCrUq7xWbN2-9kxbze4LRXhBxMLnvX1GVZbN93xjo1zhoCOmwQAvD_BwE

profile
keep on pushing

0개의 댓글

관련 채용 정보