-
마이크로서비스 깃허브 관리방식프로그래밍/MSA 2024. 11. 28. 02:18
MSA 프로젝트를 하며 깃허브 레포지토리를 어떻게 관리해야할지
많은 고민이 생겨 이것저것 알아보았다.
깃허브 관리 방식에는 3가지를 찾을 수 있었다.
1. 모노레포 (Monorepo)
2. 서브모듈 (Submodule)
3. 다중 레포지토리 (Multi-repo)
각 방식에 대해 간략히 설명해보자면
1. 모노레포 (Monorepo)
모노레포란 하나의 깃 레포지토리에서 여러 프로젝트 또는 서비스를 통합 관리하는 방식
모든 서비스와 코드를 하나의 레포지토리에서 관리하는 것이 특징
장점
1. CICD 파이프라인 설정과 코드 공유가 쉽다.
2. 서비스 간 의존성 문제를 해결하기 쉽다.
3. 같은 레포지토리에서 작업하므로 변경사항 추적이 쉬우며, 협업이 쉽다.
4. 관련된 모든 변경사항을 한번의 커밋으로 관리할 수 있기 때문에 원자적으로 관리 가능하다. All or Nothing
단점
1. msa지만 각 서비스의 독립적을 강조하기가 어렵다.
특정 서비스만 배포하기 위해선 다른 관리방식보다 더 많은 설정이 필요하다.2. 프로젝트가 커질수록 작업에 애로사항이 많다.
2. 서브모듈 (Submodule)
서브모듈은 하나의 깃 레포지토리에 다른 깃 레포지토리를 포함하여 관리할 수 있도록 한다.
이를 사용하여 프로젝트 내에서 특정 서비스를 별도의 깃 레포지토리로 관리하면서도 메인 프로젝트와 연동할 수 있다.
독립적인 저장소이므로 메인의 일부이지만, 별도의 커밋 히스토리와 브랜치를 가진다.
장점
1. 버전관리를 독립적으로 할 수 있다.
2. 공통 코드의 경우 여러 프로젝트에서 서브모듈로 추가하여 코드의 중복을 제거할 수 있다.
그래서 msa에서 dto, 유틸리티 메서드, 글로벌 예외처리로직을 별도의 저장소로 관리하고
각 서비스의 서브모듈로 사용할 수 있다.
3. 서브모듈만 독립적으로 빌드하고 배포할 수 있다.
단점
1. 서브모듈의 버전 동기화가 까다롭다.
메인 레포지토리에서 서브모듈의 버전을 명시적으로 업데이트 해주어야 한다.
2. 메인과 서브모듈 간 의존성이 생기면 두 레포지토리의 변경사항을 동시에 관리해야한다.
3. 서브모듈의 변경사항을 메인에 제때 반영하지않으면 버전차이가 발생할 수 있다.
4. 팀원들이 모두 서브모듈 사용법을 숙지하고 있어야한다.
5. 독립적으로 배포가능하다는 장점이 있으나, CICD 파이프라인 설정이 까다롭다.
3. 다중 레포지토리
각 프로젝트나 서비스를 독립된 깃 레포지토리로 관리하는 방식.
각 서비스가 완전한 독립성을 가질 수 있다.
장점
1. 완전히 독립적이기 때문에 다른 서비스의 영향을 받지 않고 개발 및 배포가 가능
2. 레포지토리의 크기가 작기 때문에 깃 속도가 빠름
3. 서비스 별로 CICD 파이프라인을 각각 설정할 수 있어 커스텀이 쉽다.
단점
1. 의존성 관리가 어렵다.
글로벌로 사용되는 공통 코드 관리에 추가적인 작업이 필요
2. 변경 사항 추적이 어렵다.
여러 레포지토리에 영향을 미치는 커밋의 경우 추적이 쉽지 않다.
세 방식을 알아보며 위와 같이 정리할 수 있었다.
현재 프로젝트는 규모가 크지 않으며, MSA에 대한 이해도가 낮으므로
모노레포가 가장 적합하다고 생각한다.
서브모듈의 경우 혼자서는 학습 후 적용할 수 있지만, 팀의 모든 인원이 서브모듈에 대한 이해도가 필요하기 때문에 힘들 것 같고
다중 레포지토리는 서비스의 규모가 작기 때문에 적용하기엔 과하다고 생각한다.
결국 모노레포
'프로그래밍 > MSA' 카테고리의 다른 글
DB 분리 스키마 vs 테이블 (0) 2024.11.28 Hystrix와 Resilience4j "제공"과 "실행"의 차이 (0) 2024.11.20