#DevOps

[의존성의 방향을 따라 2/5] 의존 그래프를 읽는 Planner

[의존성의 방향을 따라 2/5] 의존 그래프를 읽는 Planner
01

Summary

50개 레포지토리 업데이트 순서, 이제 알고리즘이 결정합니다

의존성 그래프와 위상 정렬로 풀어낸 복잡한 마이크로서비스 자동 업데이트 전략

수많은 레포지토리가 얽힌 환경에서 공통 라이브러리를 업그레이드하는 것은 단순한 작업이 아닙니다. 본 아티클은 보이지 않는 레포 간 연결 고리를 DAG로 시각화하고, 기술적 맥락에 따라 업데이트 방향을 지능적으로 뒤집는 'Planner'의 메커니즘을 소개합니다. 단순 반복 작업을 넘어 구조적 일관성을 통해 엔지니어링 효율을 극대화하는 플랫폼 개발의 정수를 보여줍니다.

  • 01레포지토리 간의 복잡한 의존 관계를 DAG(유향 비순환 그래프)로 모델링하여 가시성 확보
  • 02Kotlin(Downstream-first)과 Spring(Upstream-first) 등 기술별 최적의 전파 방향 자동 판별
  • 03Kahn 알고리즘 기반 위상 정렬을 통해 병렬 실행 가능한 'Wave' 단위의 실행 계획 수립
  • 04구조적 일관성(Consistent DSL)을 확보하여 단일 파서로 50개 이상의 레포지토리를 통합 관리
  • 05변경 사항의 폭발 반경(Blast Radius) 데이터를 기반으로 정량적인 위험도 산출 및 리뷰 프로세스 연동

RECOMMENDATION

마이크로서비스 아키텍처에서 공통 라이브러리 전파 및 버전 관리에 병목을 겪고 있는 플랫폼 엔지니어나 DevOps 팀에게 이 아키텍처 설계를 적극 추천합니다.

The Problem

멀티 레포지토리 환경에서 레포 간 의존 관계가 가시화되지 않아 버전 업데이트 시 안전한 작업 순서를 판단하기 어렵고, Kotlin이나 Spring Boot처럼 기술 특성에 따라 요구되는 전파 방향이 달라지는 복잡성이 존재합니다. 일관되지 않은 의존성 선언 방식은 자동화된 그래프 구축을 방해하며 순환 의존성 발생 시 교착 상태에 빠질 위험이 있습니다.

The Solution

모든 레포지토리에 통일된 Gradle DSL 선언을 강제하여 파싱 가능한 환경을 조성하고, 이를 기반으로 레포 간 의존성을 DAG(유향 비순환 그래프)로 구축하는 'Planner'를 도입했습니다. 변경 대상의 특성에 따라 전파 방향(Upstream/Downstream)을 판별한 뒤 간선을 조정하고, 위상 정렬(Topological Sort)을 수행하여 병렬 실행이 가능한 'Wave' 단위의 업데이트 계획을 생성합니다.

The Result

50개 이상의 레포지토리를 일일이 순차적으로 업데이트하던 비효율을 개선하여 최적의 병렬 처리 경로를 확보했으며, 변경 사항의 '폭발 반경(Blast Radius)'을 정량화하여 위험도에 따른 차등화된 리뷰 정책을 적용할 수 있게 되었습니다. 직렬 대기 횟수를 그래프 깊이 수준인 3~4단계로 압축하여 전체 배포 속도를 높였습니다.

Trade-off

시스템의 안정적인 작동을 위해 모든 레포지토리가 버전 관리 플러그인의 특정 DSL 규격을 엄격히 준수해야 하므로 개발 자유도가 일부 제한될 수 있습니다. 표준을 따르지 않는 예외적인 레포지토리는 자동화 대상에서 제외되거나 수동 관리가 필요하다는 한계가 존재합니다.

03

Key Concepts

Concept · 01

DAG (Directed Acyclic Graph)

방향성은 존재하지만 순환하는 경로가 없는 그래프 구조로, 작업 간의 선후 관계를 정의하는 데 적합합니다.

  • 레포지토리 간의 의존 관계를 모델링하여 순환 의존성을 탐지하고 방지하는 기반으로 활용됨
Concept · 02

위상 정렬 (Topological Sort)

유향 그래프의 꼭짓점들을 변의 방향을 거스르지 않도록 나열하는 알고리즘입니다.

  • Kahn 알고리즘을 통해 업데이트 전파 순서를 계산하고, 동시에 작업 가능한 레포지토리 그룹인 'Wave'를 생성함
Concept · 03

폭발 반경 (Blast Radius)

특정 컴포넌트의 변경이 시스템 전체에 미칠 수 있는 영향력의 범위를 의미합니다.

  • 의존 그래프를 통해 특정 레포지토리 변경 시 영향을 받는 하위 노드의 개수를 정량적으로 파악하여 리스크 관리에 활용함