본문 바로가기
개발

[시나브로 자바스크립트] Monorepo란?

by soyooooon 2025. 3. 14.
반응형

 

몇 년 전부터 모노레포에 대한 이야기가 계속 나오고 있고, 채용 공고에서도 지원 자격이나 우대 사항에 모노레포와 관련된 내용이 종종 보이곤 한다. 모노레포가 어떤 것이고 어떤 장점이 있기 때문에 이야기가 나오는 것인지, 한번 정리해보기로 했다.

 

모노레포란?

다수의 프로젝트를 한 개의 레포 안에서 관리하는 개발 전략

 

모노레포를 구성하기 위해 다음과 같은 방법을 사용할 수 있다.

  • TurboRepo
  • Nx
  • Lerna

모노레포를 통해 해결할 수 있는 점

  • 협업 시 유리 : 한 레포에서 관리하기 때문에 여러 사람이 여러 서비스에 보다 간편하게 접근할 수 있다.
  • 관리 및 개발 생산성에 유리 : 코드 컨벤션이나 lint 규칙을 통일하여 관리할 수 있기 때문에 관리에 유용하며, 이러한 점 외에도 코드 재사용이 증가하며 개발 생산성 또한 향상됨
  • 버전 관리에 유리 : 하나의 버전으로 관리할 수 있음

실제 사용했을 때 느꼈던 장점

회사에서 모노레포 구조를 사용한 적이 있다. 하나의 레포 안에 페이지 단위로 프로젝트를 구성하였고, 그 외에 server 모킹이나 공통 컴포넌트/utils 등은 common 폴더로 분리하여 프로젝트를 관리했다. 이 때 느꼈던 장점은 바로 공통 파일을 쉽게 관리할 수 있다는 점이었다. 이전에 프로젝트 간 공통 파일을 관리할 때 git subtree를 시도한 적이 있었는데, 관리가 잘 되지 않는다는 단점이 있었다. 공통 파일이더라도 사용하다보면 추가되어야 할 부분이나 수정되어야 할 부분이 있어 이를 반영하곤 했는데, 업데이트 후 어떤 프로젝트에서는 반영하고 어떤 프로젝트에서는 반영하지 않다보니 나중에는 꼬이는 일이 생기기도 했다. 모노레포를 사용하면 하나의 레포를 사용하기 때문에 이러한 문제를 해결할 수 있었다.

모노레포를 사용할 때 주의할 점

  • 여러 프로젝트를 관리하며 레포의 규모는 점점 커지기 때문에 빌드 속도가 느려지며, CI/CD의 복잡도가 늘어난다는 단점이 있다. 때문에 모노레포 도구를 통해 적절한 최적화를 신경 써야한다.
  • 또한 러닝커브로 인해 초기 구축 시 많은 변경이 필요하거나 많은 리소스가 들 수 있기 때문에 이 또한 도입이 가능한 상태인지 검토해보아야 한다.

현재 프로젝트에 적절한가, 어떻게 나눌 것인가를 충분히 고려하고 사용

회사에서 모노레포를 사용한 적이 있었지만 결국 다시 원상태로 돌리게 되었다. 그 이유는 오버 엔지니어링에 가까웠기 때문이다. 우선 페이지 단위로 관리되었기 때문에, 만약 여러 페이지를 한번에 업데이트 해야하는 상황이 오면 페이지별로 테스트 배포/실 배포를 각각 나눠서 진행해야 하는 번거로움이 있었다. 그리고 꼭 페이지를 나누어서 관리해야 할 만큼 페이지별 기능 규모가 크지 않았기 때문에 오히려 하나의 프로젝트로 관리하는 것이 더 효율적이었다. 마침 Svelte -> React로 마이그레이션 하기로 결정되며 모노레포 구조를 버리고 원래의 형태로 돌아오게 되었다.

이러한 이유로 모노레포를 도입하기 전, 현재 프로젝트 상태에 적절한 지를 충분히 고려해야 한다. 또한 도입을 하게 된다면 어떤 기준으로 프로젝트를 나누어 사용할 것인지도 함께 고려해야 한다. 페이지 단위, 기능 단위, 혹은 그 외 단위들에 대한 적절한 기준을 세워야 오버 엔지니어링을 피할 수 있을 것이다.

반응형