본문 바로가기
CS 지식/개발 방법론

모노레포(monorepo) 란?

by 검은도자기 2023. 2. 19.

모노레포가 뭘까?

두 개 이상의 프로젝트 코드를 하나의 버전 관리 저장소(repository)에서 관리하는 방법을 말합니다.

 

 

모노레포가 왜 나왔을까?

모노레포(mono repo) 개념이 처음 등장한 이유는 여러 가지가 있지만, 대표적인 이유 중 하나는 큰 규모의 소프트웨어 개발 프로젝트에서 발생하는 문제를 해결하기 위해서입니다.

큰 규모의 프로젝트에서는 여러 개의 코드 저장소가 생성됩니다. 표면적으로 봤을 때는 큰 문제가 없으나 다음과 같은 문제점들 때문에 프로젝트 관리에  어려움이 발생할 수 있습니다. 

 

  • 중복되는 코드
  • 서로 다른 패키지 의존성
  • 서로 의존하는 프로젝트들끼리의 리팩터링 비용
  • 코드가 저장소마다 상황이 다르기에 개발자들 사이의 협업도 어려워지는 문제

 

이러한 문제를 해결하기 위해 모든 프로젝트 코드를 단일 코드 저장소에서 관리함으로써 중복을 줄이고 의존성을 관리하여 개발자의 협업과 개발 생산성을 향상하는 방법으로 등장하게 되었습니다.

 

 

특징

  • 단일 코드 저장소: 모든 소스 코드를 단일 코드 저장소에 유지합니다.
  • 모듈화: 코드를 모듈화 하여 필요한 모듈만 가져와서 사용할 수 있습니다.
  • 의존성 관리: 모든 코드가 단일 코드 저장소에 있기에 의존성 문제를 빠르게 해결할 수 있습니다.
  • 협업: 모든 코드가 단일 코드 저장소에 있기에 다른 개발자들 간의 협업이 편해집니다.
  • 코드 품질: 리팩터링시 모든 프로젝트의 상황을 고려하기 때문에 코드 품질을 일관성 있게 유지할 수 있습니다.

 

 

단점

  • 복잡성 증가: 여러 프로젝트를 하나의 저장소에서 관리하므로 코드 충돌 등의 문제가 발생할 가능성이 높아집니다.
  • 빌드 시간 증가: 모든 프로젝트를 함께 빌드해야 하므로 빌드시간이 증가할 수 있습니다.
  • 변경 사항이 모든 프로젝트에 영향을 미침: 하나의 프로젝트에서 발생한 변경 사항이 전체 시스템에 영향을 미칠 수 있습니다.

 

 

이제부터는  모노레포 방식만 사용하여 프로젝트를 만들어야 할까?

꼭 그렇지는 않습니다. 프로젝트의 규모, 복잡성, 의존성 등을 고려하여 고민해봐야 하며 다음과 같은 경우는 모노레포가 적합하지 않을 수 있습니다.

  • 작은 프로젝트: 이 경우에는 모노레포 방식은 오버 엔지니어링처럼 느껴질 수 있습니다.
  • 다른 언어를 사용하는 프로젝트: 서로 다른 언어로 개발된 프로젝트들을 모노레포 방식으로 통합하기는 어려울 수 있습니다.
  • 서로 다른 배포 주기를 가진 경우: 모노레포에서는 모든 프로젝트를 함께 배포해야 하기 때문에 서로 다른 배포 주기를 가지는 프로젝트가 있는 경우에는 멀티 레포 방식이 더 적합할 수 있습니다.

 

 

마무리

최근 여러 프로젝트들이 모노레포 방식을 적용하여 사용한다고 하기에 무엇인지 궁금하여 공부를 진행해 보았습니다.

공부를 해보니 좋은 방식인걸 이해했지만 아직은 회사 내부 프로젝트에는 적용할 수 없는 방식이어서 좀 아쉽다고 느껴졌습니다. 이 부분은 나중에 개인 프로젝트를 만들 때 적용해 봐야겠다고 생각이 드네요.

아직 부족하거나 틀린 부분이 있을 수도 있으니 주의하시면 좋을 거 같습니다.

이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다.

 

참고

https://en.wikipedia.org/wiki/Monorepo

팀워크 향상을 위한 모노레포(Monorepo) 시스템 구축

모던프론트엔드 프로젝트 구성 기법 - 모노레포 개념 편

 

'CS 지식 > 개발 방법론' 카테고리의 다른 글

함수형 프로그래밍이란?  (0) 2022.04.28
TDD(Test Driven Development)란?  (0) 2021.11.02