
ArchUnit과 Nebula를 결합해 100만 개의 코드 이슈를 잡아내는 넷플릭스의 기술 거버넌스 전략
본 아티클은 넷플릭스가 대규모 폴리레포 환경에서 어떻게 아키텍처 규칙을 강제하고 기술 부채를 관리하는지 다룹니다. 단순한 정적 분석을 넘어, 라이브러리 단위로 규칙을 배포하고 실행하는 Nebula ArchRules의 아키텍처와 실제 운영 사례를 심도 있게 소개합니다.
수많은 마이크로서비스를 관리하며 아키텍처 표준을 강제하고 싶은 플랫폼 엔지니어나, 라이브러리 변경 시 영향도를 파악하고 싶은 라이브러리 제작자에게 강력 추천합니다.
넷플릭스는 1만 개 이상의 자바 저장소를 운영하는 폴리레포 전략을 사용하고 있으며, 이로 인해 전사적인 빌드 로직 공유와 라이브러리 생명주기 관리에 어려움을 겪고 있었습니다. 특히 라이브러리 작성자가 하위 호환성이 깨지는 변경을 가할 때 어떤 프로젝트가 영향을 받는지 파악할 수 있는 가시성이 부족했습니다.
기존 JUnit 기반의 ArchUnit을 확장한 Nebula ArchRules 플러그인을 개발하여 아키텍처 규칙을 JAR 형태로 패키징하고 배포할 수 있는 구조를 구축했습니다. 이를 통해 Gradle Module Metadata를 활용하여 개별 프로젝트가 사용하는 라이브러리에 최적화된 규칙을 자동으로 탐색하고 실행할 수 있는 러너 시스템을 도입했습니다.
현재 5,000개 이상의 저장소에서 358개의 규칙을 실행하여 약 100만 건의 이슈를 감지하고 있으며, 라이브러리 작성자가 실험적 또는 지원 종료 예정인 API의 전사적 사용 현황을 실시간으로 파악할 수 있게 되었습니다.
Trade-off
이 솔루션은 Gradle 생태계 및 Nebula 플러그인에 강력하게 결합되어 있어 타 빌드 시스템으로의 이식이 어렵고, 빌드 타임에 바이트코드 분석을 수행함에 따라 대규모 프로젝트에서 빌드 시간이 소폭 증가할 수 있는 가능성이 존재합니다.
자바 코드의 패키지 의존성, 클래스 명명 규칙 등 아키텍처 규칙을 테스트 코드로 검증할 수 있게 해주는 오픈소스 라이브러리입니다.
넷플릭스가 개발한 Gradle 플러그인 모음으로, ArchUnit 규칙을 라이브러리처럼 배포하고 자동으로 실행할 수 있게 돕습니다.
자바 바이트코드를 읽고 조작하기 위한 프레임워크로, 소스 코드 수준이 아닌 컴파일된 결과물을 분석합니다.




