공통 라이브러리의 버전 관리 및 배포 방식 결정 - Genie-Uss/genieus GitHub Wiki
🧩 문제 상황 (Problem)
MSA 환경에서 공통 라이브러리(이벤트 처리, 로깅 등)를 여러 서비스에 적용하면서 다음과 같은 문제에 직면했습니다:
- 공통 로직을 각 서비스 내에서 복사/붙여넣기 방식으로 중복 작성함에 따라 코드 일관성 유지가 어려움
- 일부 서비스가 로컬 JAR 파일을 직접 의존하거나, Gradle 프로젝트에 포함된 모듈로만 관리되어 버전 충돌 및 변경 이력 추적이 어려움
- 신규 기능 또는 버그 수정 시, 모든 서비스에 동일하게 적용되었는지 확인할 수 있는 체계 부족
🎯 선택한 해결 방안 (Decision)
GitHub Packages를 활용한 내부 공통 라이브러리의 버전 관리 및 배포 체계 구축
- 모든 공통 기능을 별도 Maven 프로젝트로 분리하여 도메인 서비스와 완전히 독립된 모듈화 수행
- 공통 모듈을 GitHub Packages의 Private Maven Repository로 배포하여 버전 기반 참조 가능하도록 구성
- 팀 전체가 공통 모듈을
implementation("com.genieus-common-lib:1.2.3")
방식으로 명시적 참조
⚙️ 적용 목표 (Objectives)
- ✅ 코드 중복 제거: 모든 서비스에서 동일한 로직을 하나의 공통 모듈로 사용
- ✅ 버전 명시적 관리: 배포된 기능 및 변경 이력 추적 가능 (
1.2.3
,1.2.4-beta
등) - ✅ 개발 편의성 향상: 신규 프로젝트에서 공통 기능을 바로 사용할 수 있도록 템플릿화
- ✅ 의도치 않은 변경 방지: 각 서비스는 명시된 버전을 사용할 뿐 내부 구현을 참조하지 않음
🧪 적용 결과 (Results)
- 공통 이벤트 처리, 로깅 AOP, 메시지 역직렬화 등 5개 이상의 도메인 서비스에서 동일한 방식으로 일관되게 적용
- 신규 기능 릴리즈 시 공통 라이브러리만 업데이트하고, 각 서비스는
버전만 변경
하여 수용 - 팀 내 신규 개발자도 공통 라이브러리 구조를 통해 빠르게 온보딩 가능
- 공통 모듈 사용 중 문제가 발생할 경우,
해당 버전에서만 재현되는 버그
를 구분할 수 있어 디버깅 효율성 증가
🔭 향후 개선 사항 (Next Steps)
- 🔄 Semantic Versioning(SemVer) 적용 강화를 통해 Major / Minor / Patch 릴리즈 정책을 명확히 정립
- 📦 GitHub Packages 외에도 Artifactory, AWS CodeArtifact 등의 대체 배포 채널 도입 검토 (트래픽, 보안 이슈 고려)
- 📋 공통 라이브러리 전용 CHANGELOG 및 문서 자동 생성 파이프라인 구성 → 릴리즈 시점에 릴리즈 노트 자동 배포
- 🧪 각 서비스에 적용된 공통 모듈의 버전과 주요 변경점을 한눈에 확인할 수 있는 공통 사용 현황 대시보드 구축