Home Monorepo
Post
Cancel

Monorepo

Monorepo 란?

vcs에서 같은 repository에 여러 프로젝트들이 모여있는 소프트웨어 개발 전략

장점

  • 코드 재사용이 쉬움 - 다른 개발자의 코드를 볼 수 있기 때문에, 코드 재사용이 쉽다.

  • 빌드 최적화 - 여러 프로젝트들이 third-party dependency에 의존하고 있을때, 그 dependency가 여러번 다운로드 되고, 빌드 될수있다. monorepo 에서는 참조된 의존성들이 같은 코드베이스에 존재하므로 빌드가 쉽게 최적화 될수있다.

  • 의존성 관리가 편해짐 프로젝트들이 독립된 repository에서 실행이될때는 하나의 프로젝트의 버전이 다른 프로젝트의 어떤 버전와 호환이 되는지 sync를 할필요가 있다. 이러한 과정을 관리하는것은 정말 복잡한 일이다. monorepo는 프로젝트들사이에 호환성을 파악하기가 편리해진다.

  • One source of truth - 각각의 프로젝트들이 독립적인 설정들을 갖는것 대신에, 모든 프로젝트들에 대해서 하나의 config만 가지게 되므로 프로젝트 관리하기가 편해진다.

  • Atomic Commit Convention 시스템의 한가지 측면만 영향을 주는 commit을 말한다. atomic commit을 하게되면 에러가 발생했을때, 에러의 발생원인을 더 찾기 쉬워진다. 왜냐하면 해당 에러에 관한 커밋들만 보면되기 때문이다. 결국 monorepo는 한번의 커밋으로 모든 패키지들에 영향을 줄수 있으므로, 개발 프로세스가 빨라진다.

  • Large-scale 코드 리팩토링 개발자들이 전체 프로젝트에 대해서 접근 할수 있으므로, 리팩토링후에 전체 프로젝트의 각각의 sub-project들이 계속해서 동작함을 보장할수 있다.

  • 팀들간의 협업효과가 증가한다. 팀들이 서로서로의 프로젝트들을 개선할수 있기때문에 협업효과가 증가한다.

단점과 한계점

  • version information의 손실 - 전체 프로젝트들을 통틀어서 버저닝을 하게되면 서브 프로젝트들의 버저닝 정보가 손실될수있다.

  • 프로젝트별 접근통제가 힘들어진다 - 프로젝트에 있는 모든 소프트웨어에 읽기 접근이 가능하므로, 새로운 보안이슈가 생겨날수있다. 하지만 Apache Subversion을 사용하면 path별로 권한 설정이 가능해진다.

  • 빌드 시간이 증가한다 - 독립된 프로젝트를 빌드하는것보다 빌드시간이 증가한다.

  • Git performance - 전체 코드가 하나의 리포에있으므로, git이 트래킹해야하는 커밋수가 많아진기때문에 git의 performance가 느려질수 있다.

  • 하나의 repository가 여러개의 프로젝트들을 포함하고있으므로, 용량이 커진다. -> git의 sparse checkout (저장소의 특정 디렉토리나 파일만 보이도록 체크아웃하는 기능) 을 사용하면 해결이 가능

This post is licensed under CC BY 4.0 by the author.

Convention over configuration

MSA

Comments powered by Disqus.

Trending Tags