대규모 코드 마이그레이션(Large-scale Code Migration)의 성공을 위해 강력한 판정자(Strong Judge) 구축을 최우선 과제로 삼음
Claude Code를 활용하여 규칙집(Rulebook), 의존성 맵(Dependency Map), 간극 목록(Gap Inventory)을 생성하고 테스트 규칙을 강화함
다중 에이전트 루프(Multi-agent Loop) 아키텍처를 통해 구현, 검토, 수정을 반복하며 코드 변환 및 컴파일, 동작 일치를 자동화함
메모리 누수(Memory Leak) 해결 및 바이너리 크기 19% 감소, 성능 2-5% 향상 등 측정 가능한 개선 효과를 달성함
본문에서는 코드 마이그레이션 성공의 핵심 요소로 테스트 스위트(Test Suite) 기반의 판정자(Judge) 구축을 강조함. 기존 테스트를 외부 호출(External Calls)과 내부 함수 의존성(Internal Dependencies)으로 분류하고, 외부 호출 기반 테스트를 재작성하여 원본 및 대상 코드 모두에 적용 가능한 형태로 변환하는 것이 중요함. 또한, 적대적 에이전트(Adversarial Agents)를 활용하여 재작성된 테스트의 유효성을 검증하고, 의도적으로 오류를 주입한 코드에 대한 판정자의 실패 여부를 확인하여 판정자의 신뢰성(Judge Reliability)을 확보해야 함.
Anthropic은 Claude Code를 활용하여 규칙집(Rulebook), 의존성 맵(Dependency Map), 간극 목록(Gap Inventory)을 생성하는 다단계 워크플로우를 제시함. 규칙집은 언어별 타입 변환 및 관용구 매핑을 정의하며, 간극 목록은 규칙집으로 해결되지 않는 복잡한 부분을 식별함. 의존성 맵은 병렬 마이그레이션을 위한 작업 순서를 결정하는 데 필수적이며, Claude Code 에이전트가 이를 자동으로 생성하고 검토하는 루프를 지원함. 특히, 구조 보존 마이그레이션(Structure-Preserving Migration)의 경우, 소규모 파일 묶음으로 규칙집의 유효성을 스트레스 테스트(Stress Test)하여 치명적인 오류를 조기에 발견하는 것이 핵심임.
본문은 구현(Implement), 검토(Review), 수정(Fix)의 3단계로 구성된 다중 에이전트 루프 아키텍처를 상세히 설명함. 작은 모델은 대량의 코드 구현을 담당하고, 큰 모델은 검토 역할을 수행하여 효율성을 극대화함. 기계적인 작업 큐(Mechanical Work Queue)는 마이그레이션의 재개 가능성을 보장하며, 컴파일러와 연동하여 오류를 자동으로 식별하고 수정 에이전트가 이를 해결함. 적대적 검토자(Adversarial Reviewers)는 구현 에이전트의 실수를 지속적으로 찾아내고, 반복되는 오류는 규칙집 업데이트로 이어져 지속적인 개선(Continuous Improvement)을 가능하게 함.
Jarred의 Bun 마이그레이션 사례에서 메모리 누수(Memory Leak)가 완전히 해결되었으며, 2,000번의 반복 빌드에서 메모리 사용량이 6,745MB에서 609MB로 약 91% 감소함. 또한, Linux 및 Windows 환경에서 바이너리 크기가 19% 감소했으며, HTTP 서빙 및 `next build`, `tsc`와 같은 실제 워크로드에서 성능이 2-5% 향상되는 측정 가능한 결과를 얻음. 이는 코드 현대화(Code Modernization)를 통해 얻을 수 있는 실질적인 이점을 보여줌.
기존 코드베이스에 테스트 스위트가 없더라도 Claude Code가 자체적으로 테스트 스위트를 생성하여 마이그레이션의 정확성을 검증할 수 있음. Mike는 7가지 실제 시나리오를 기반으로 패리티 하네스(Parity Harness)를 구축하고, Claude가 이를 기반으로 자체적인 엔드투엔드(End-to-End) 테스트 스위트를 설계하여 밤새 실행하고 오류를 수정하는 과정을 반복함. 이 접근 방식은 예측 불가능한 사소한 오류(Paper Cuts)까지 잡아내는 데 효과적이며, 원본 코드베이스를 진실 공급원(Ground Truth)으로 삼아 마이그레이션의 신뢰도를 높임.