
단순해 보이는 규칙 아래 감춰진 빌드 시스템 동형성과 의존성 단방향화의 기술적 비밀
본 아티클은 라이브러리를 언제나 최신 상태로 유지하기 위해 flex가 개발한 'version family plugin'과 그 기반 인프라를 소개합니다. 기술 통일을 뜻하는 '동형성'의 중요성, 순환 없는 단방향 의존성 아키텍처의 설계, 그리고 전사 레포지토리에 버전을 안전하게 전파하는 Evergreen 파이프라인의 실체를 심도 있게 보여줍니다. 단순한 툴 개발을 넘어 동료 엔지니어들이 가볍고 빠르게 일할 수 있는 평평한 기반을 닦는 플랫폼 조직의 본질적 가치를 전달합니다.
마이크로서비스나 폴리레포 아키텍처 환경에서 공통 모듈 버전 불일치로 마찰을 겪고 있거나, 효율적인 플랫폼 인프라 및 자동화 파이프라인을 구축하려는 데브옵스 및 시니어 백엔드 엔지니어에게 적극 권장합니다.
폴리레포 환경에서 각 프로젝트가 개별적으로 라이브러리 버전을 고정하여 사용함에 따라, 어떤 버전이 안전하게 검증된 버전인지 공유되는 단일 출처가 없어 버전 불일치로 인한 슬랙 소통 및 디버깅 비용이 반복적으로 누적되는 문제가 있었습니다.
사내 Gradle 플러그인(version family plugin)을 개발하여 그룹명 기준으로 버전을 묶어 관리하고, 의존 관계를 순환이 없는 단방향 그래프(DAG) 구조로 정렬한 뒤 버전 전파 자동화 파이프라인(Evergreen)을 구축했습니다.
어떤 라이브러리 버전을 써야 하는지에 대한 개발자들의 고민과 슬랙 소통 비용이 완전히 제거되었으며, 버전 비호환으로 밤새 디버깅하던 마찰을 구조적으로 없애 개발 편의성을 대폭 향상했습니다.
Trade-off
강력한 버전 및 의존성 응집의 대가로 시스템의 비가역성이 증가하여, 공통 빌드 정책에 오류가 생길 경우 전사 레포지토리가 동시에 장애 영향을 받을 수 있는 잠재적 리스크가 존재하며 모든 레포지토리가 Gradle 빌드 시스템을 공유해야만 작동한다는 전제 조건이 따릅니다.
개별 라이브러리의 버전을 명시하는 대신 특정 그룹으로 묶어 검증된 동일한 버전 세트를 공유하게 만드는 빌드 도구입니다. 레포지토리 외부에서 일관된 버전 규칙을 일괄 부여할 수 있는 메커니즘을 제공합니다.
조직 내 모든 소프트웨어 프로젝트가 동일한 빌드 언어, 도구 체계, 그리고 릴리스 정책을 완전하게 공유하는 일관성 있는 상태를 의미합니다. 이는 강력한 글로벌 규칙을 전사 프로젝트에 일괄적으로 강제하고 감시하기 위한 필수적인 바탕이 됩니다.
서비스 및 모듈 간의 의존성이 어떠한 순환 경로도 형성하지 않고 한 방향으로만 흐르는 구조적 정렬을 말합니다. 순환 참조로 인한 복잡성을 배제하고 변경의 인과 관계를 예측 가능하게 만들어 줍니다.




