CI 대기 시간 단축: Pinterest는 어떻게 안드로이드 테스트 빌드 시간을 36% 이상 단축했을까?
Pinterest의 Android 엔드투엔드 테스트 빌드는 테스트 샤드 불균형과 플랫폼 제한으로 인해 느리고 불안정했습니다. 팀은 먼저 타사 솔루션을 평가했지만, 자체 요구 사항에 부적합하다고 판단했습니다. 이에 따라 EC2 에뮬레이터에서 호스팅되는 PinTestLab이라는 자체 테스트 플랫폼을 구축하기로 결정했습니다. 이 플랫폼을 통해 테스트 스택과 인프라를 완벽하게 제어할 수 있게 되었습니다.핵심 혁신은 런타임 인식 샤딩 메커니즘입니다. 이 시스템은 과거 테스트 실행 시간 및 안정성 데이터를 사용하여 테스트를 샤드에 분배합니다. 목표는 각 샤드의 총 실행 시간을 유사하게 만드는 것입니다. 이 접근 방식은 단순히 샤드당 테스트 수를 균등하게 분배하는 것과는 다릅니다.이전에는 패키지 기반 샤딩으로 인해 단일 느린 샤드가 전체 빌드를 지연시키는 불균형이 발생했습니다. 단순한 시간 기반 정렬조차도 에뮬레이터 유휴 시간을 고려하지 못했습니다. 새로운 런타임 인식 샤딩 알고리즘은 테스트를 평균 실행 시간별로 정렬한 다음, 가장 빨리 완료될 것으로 예상되는 에뮬레이터에 각 테스트를 탐욕적으로 할당하는 방식으로 작동합니다. 이를 통해 모든 에뮬레이터가 바쁘게 작동하고 가장 빠른 샤드와 가장 느린 샤드 간의 시간 차이를 최소화합니다.이 솔루션의 영향은 상당했습니다. 엔드투엔드 빌드 시간이 9분 단축되어 36% 개선되었습니다. 가장 느린 샤드의 실행 시간은 55% 감소했습니다. 가장 빠른 샤드와 가장 느린 샤드 간의 시간 차이는 597초에서 130초로 극적으로 줄었습니다. 이는 더 빠르고 안정적인 피드백을 제공하여 개발자 생산성을 향상시킵니다.