피드로 돌아가기
InfoQInfoQ
DevOps

OpenRewrite와 Shepherd로 7.5만 개 JUnit 5 테스트 클래스 자동 마이그레이션

Uber Migrates 75,000+ Test Classes from Junit 4 to Junit 5 Using Automated Code Transformation

Leela Kumili2026년 4월 27일2advanced

Context

JUnit 4의 유지보수 모드 진입에 따른 최신 테스트 프레임워크 도입 필요성 증대. Bazel 기반 Monorepo 환경에서 대규모 코드베이스의 수동 전환 시 발생하는 리스크와 인프라 제약 사항 존재.

Technical Solution

  • JUnit Platform 기반의 Unified Execution Model을 구축하여 JUnit 4(Vintage)와 5(Jupiter) 테스트의 동시 실행 환경 마련
  • OpenRewrite의 Semantic Representation을 활용하여 API 변경 사항을 결정론적(Deterministic)으로 변환하는 Recipe 설계
  • Uber 전용 Test Runner 및 Base Class 대응을 위해 표준 Recipe를 확장한 Custom Transformation 로직 적용
  • 부분 마이그레이션 방지를 위한 Precondition Check 도입으로 자동화 업데이트 대상의 정밀도 확보
  • 내부 오케스트레이션 시스템인 Shepherd를 통한 수천 개의 Bazel Target 병렬 처리 및 CI 파이프라인 검증 자동화
  • Iterative Rollout 모델을 적용하여 초기 실패 사례를 분석하고 Transformation 로직을 점진적으로 고도화

1. 대규모 전환 전 하위 호환성을 보장하는 실행 레이어(Compatibility Layer) 구축 여부 검토

2. 단순 텍스트 치환이 아닌 코드의 의미 분석이 가능한 AST 기반 도구(예: OpenRewrite) 도입 고려

3. 자동 변환-CI 검증-피드백 반영이 반복되는 Iterative Rollout 전략 수립

4. 전사 공통 패턴 외에 도메인 특화 Custom Recipe 정의를 통한 자동화 커버리지 확대

원문 읽기