모노레포
버전관리 시스템에서 두가지 이상의 프로젝트 소스코드를 한개의 동일한 저장소에 저장하는 소프트웨어 개발 전략이다.
모노레포는 모놀리식 구조를 한계를 비판하는데서 시작했다.
모놀리식
- 대규모 프로젝트에서 소스코드가 모듈화 없이 하나의 프로젝트로 구성되는 방식을 말한다.
- 이러한 모놀리식 구조의 한계는 모듈화를 통해 해결할 수 있다.
모듈식 프로그래밍
- 애플리케이션 로직 일부를 재사용 할수 있게 도와주고, 전체 교체 없이 일부를 수정 또는 교체 할수 있게 해서 유지관리를 용이하게 해준다.
- 이러한 모듈들을 독자적인 각각의 저장소를 만들어 관리해주는 방식이 있다. 바로 멀티레포이다.
멀티레포
- 멀티레포 구조는 폴리레포 구조 라고도 불린다.
- 이러한 방식은 각 프로젝트의 자율성을 높이고, 독립적인 개발, 린트, 테스트, 빌드, 배포 파이프 라인을 가진다.
- 하지만 이러한 멀티레포에도 한계가 존재한다.
멀티레포 한계
- 새로운 프로젝트를 생성할 때마다 개발 환경 구축 및 세팅을 매번 해줘야한다.
- 중복되는 코드나 모듈이 생길수 있다.
- 관리할 포인트가 많아진다.
- 일관성 없는 개발자 경험이 발생한다.
이러한 멀티레포의 한계를 극복하고, 반대되는 개념이 모노레포이다.
모노레포 구조
- 앞서 말했듯이 두개 이상의 프로젝트가 동일한 저장소에 저장되는 개발 전략이라고 했다. 앞선 예시의 모듈들은 모노레포에서 여전히 독자적인 프로젝트로 존재하지만 저장소는 같은 곳을 사용하는 것이다.
모노레포의 이점
- 프로젝트 생성이 더욱 쉬워진다. 저장소 생성 및 커미터 추가 과정이 필요 없고, 기존 데브옵스를 이용한다.
- 의존성을 필요에 따라 다르거나 같게 관리 할 수 있다. 공통의 작업을 하는 경우 여러 곳에 동일하게 적용해야하는 번거로움을 해소하고, 명렁 한번으로 여러개의 모듈에 동일한 작업을 적용할 수 있다.
- 일관된 개발자 경험을 제공한다. 일관된 개발 환경 구축과 테스트를 할 수 있다. 다른 팀의 애플리케이션에 기여하는데 문제가 없고, 변경 사항이 안전한지 확인 할수 있다.
- 한곳에서 버전관리를 하고, 코드의 공유와 재사용성, 수정이 용이하다.
여러 다른 프로젝트를 한 저장소에서 관리한다면 내가 모르는 사이 다른 개발자가 내 코드를 변경하고자 한다면 어떻게 될까?
- 깃헙에는 CODEOWNERS와 같은 기능을 사용해 폴더 기반으로 소유권을 구성할수 있다. 따라서 소유자에게 리뷰를 받아 머지 할수 있게 된다.
참고
모노레포 개념 편