ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 마이크로서비스 깃허브 관리방식
    프로그래밍/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
Designed by Tistory.