- Airbnb는 약 3,500개의 Enzyme 기반 테스트 파일을 React Testing Library(RTL) 로 자동 마이그레이션하는 데 성공
- 원래 1.5년이 걸릴 것으로 예상한 작업을 LLM과 자동화 파이프라인으로 단 6주 만에 3.5K의 테스트파일 업데이트 완료
- 자동 유효성 검사, 리트라이 루프, 동적 프롬프트 및 대규모 컨텍스트 구성으로 높은 자동화 성공률 확보
- 최종적으로 전체 파일의 97%를 자동 변환, 나머지는 수동 마무리로 100% 완료
- 이 경험을 기반으로 더 복잡한 마이그레이션 작업과 LLM 기반 개발 도구 확장 계획 중
Airbnb의 LLM 기반 대규모 테스트 마이그레이션
배경
- Airbnb는 2020년부터 신규 테스트에 React Testing Library(RTL)를 사용하며 Enzyme에서의 전환을 시작
- Enzyme은 내부 구현에 깊게 접근하는 방식이 현대 React 철학과 맞지 않아 점진적 제거 필요성 대두
- 단순 제거는 테스트 커버리지 공백을 초래, 의도와 커버리지를 유지하면서의 변환이 요구됨
마이그레이션 전략
1. 단계 기반 유효성 검사 및 리팩터링
- 파일을 상태 기반 파이프라인으로 구성해 각 단계 유효성 검사 통과 시 다음 단계로 이동
- 실패 시 LLM을 호출해 수정 시도, 단계는 예: enzyme 제거 → jest 수정 → lint/tsc 통과 → 완료 마킹
-
수백 개 파일을 병렬 처리 가능, 단순 파일은 빠르게 처리, 복잡 파일은 점진적으로 해결
2. 리트라이 루프 및 동적 프롬프트
- 실패한 단계는 최대 시도 횟수만큼 반복 실행
- 각 시도 시, 에러 메시지와 수정된 파일을 프롬프트에 포함해 LLM에게 피드백 제공
- 단순~중간 난이도 파일 대부분은 10회 이하 시도로 성공
3. 프롬프트 컨텍스트 확장
- 복잡한 파일은 단순 리트라이로 해결되지 않아 풍부한 컨텍스트 제공 방식으로 전환
- 최대 10만 토큰까지 구성, 포함 항목:
- 해당 컴포넌트 소스 코드
- 기존 Enzyme 테스트
- 인접 테스트 및 예시 (few-shot prompting)
- 팀 내부 스타일 및 공통 패턴
- 핵심은 양질의 관련 파일 선택, 프롬프트 문장 자체보다 "무엇을 넣느냐"가 더 중요
4. 75%에서 97%까지 끌어올리기: 체계적인 개선
- 자동화로 75% 전환 후, 나머지 25% 중 900개 파일이 실패 상태
- 문제 분석 및 개선 반복:
- 실패 파일 공통 이슈 수집
- 대표 샘플 선정 (5~10개)
- 프롬프트/스크립트 개선
- 샘플에 테스트 적용 후 전체 재시도
- 4일간 반복 실행으로 자동화 완료율 97% 도달
남은 3%는 수동 처리
- 100회 이상 재시도에도 실패한 일부 파일은 자동 리팩터링 결과를 기반으로 수동 수정
- 이 또한 자동화 덕분에 최소한의 노력으로 최종 완성
결과 및 영향
-
자동화 첫 실행에서 4시간 만에 75% 마이그레이션 완료
- 4일간의 반복 개선으로 97% 자동화 완료
- 나머지 수동 처리 포함해 전체 6주 내에 전환 작업 100% 완료
- 테스트 의도 및 커버리지 유지하면서 Enzyme 완전 제거
-
LLM API 비용 + 엔지니어링 자원 포함해도 수작업 대비 매우 효율적인 접근
다음 단계
- 이번 경험을 바탕으로 LLM을 활용한 더 대규모 코드 변환 자동화에 착수
- 복잡한 리팩터링, 구조 변경 등에도 적용 가능성 탐색