Nebula ArchRules로 ArchUnit 확장
Netflix는 Nebula ArchRules로 ArchUnit 규칙을 수만 개의 Java 레포에 공유하는 방식을 소개했다.
Netflix는 수만 개의 Java 레포를 가진 polyrepo 환경에서 공통 빌드 로직과 API 사용 규칙을 일관되게 적용하려고 Nebula ArchRules를 만들었다. 출발점은 deprecated 코드를 오래된 라이브러리에서 삭제했다가 생긴 하위 호환성 문제였고, 이를 계기로 @Deprecated, @Public, @Experimental와 나머지를 internal로 간주하는 API lifecycle 체계를 정리했다.
ArchUnit를 고른 이유는 분명하다.
- ASM/bytecode 기반이라 Kotlin, Scala를 포함한 JVM 언어 전반에 적용된다.
- fluent builder API 덕분에 규칙을 type-safe Java 코드로 작성하고 테스트하기 쉽다.
- 클래스 관계와 호출 지점까지 보며 더 복잡한 static analysis 규칙을 만들 수 있다.
Nebula ArchRules의 library plugin은 Gradle의 archRules source set을 추가하고, ArchRulesService가 Map<String, ArchRule>를 반환하게 한다. 규칙은 별도 JAR로 패키징되며 usage attribute를 arch-rules로 둔 variant와 Gradle Module Metadata를 통해 downstream에 배포된다.
운영 방식은 두 갈래다. standalone rule libraries는 모든 source set에 적용되는 공용 규칙이고, bundled rule libraries는 main code와 함께 배포되어 해당 라이브러리를 쓰는 source set에만 자동 적용된다. runner plugin은 source set별 configuration을 만들고 archRules classpath와 runtimeClasspath를 합친 뒤 ServiceLoader로 규칙을 찾으며, archRuleRuntime 수준의 classpath isolation과 Work Action으로 평가한다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.