뱅크샐러드 Web chapter에서 GitHub Action 기반의 CI 속도를 개선한 방법
핵심 내용
뱅크샐러드가 GitHub Actions의 의존성 캐싱과 Job 병렬화, 변경 사항만 테스트하는 전략으로 CI 실행 시간을 40초대로 단축했다.
자세히 보기
뱅크샐러드 웹 프론트엔드 엔지니어 조성동은 GitHub Actions의 실행 대기 시간을 줄이기 위해 CI 속도 개선 전략을 공개했다. 기존 방식은 20명이 사용할 경우 총 1시간의 대기 시간이 발생했으나, 캐싱과 병렬 처리를 적용해 action 시작부터 종료까지 40초대로 개선했다.
의존성 설치 시간을 단축하기 위해 actions/cache@v3를 활용했다. package-lock.json 해시를 키로 사용하여 node_modules를 캐싱했으며, 캐시 히트 시 npm ci 실행을 생략했다. 이를 통해 의존성 설치 시간이 1분 8초에서 21초로 단축되었다. 다만 첫 번째 커밋에는 캐시가 없으며, 무료 플랜의 저장 공간 제한으로 인해 오래된 캐시가 삭제될 수 있다는 점을 고려해야 한다.
Job 구조를 개선하여 실행 효율을 높였다. 기존에는 lint, test, build를 하나의 Job에서 순차적으로 실행했으나, 이를 여러 Job으로 분리해 병렬 실행하도록 변경했다. 각 Job은 독립적인 Runner를 할당받으므로 의존성 설치 단계가 필요하지만, 순차 실행 대비 대기 시간을 크게 줄일 수 있다. 예를 들어 각 단계가 10초씩 걸릴 때 순차 실행은 30초가 소요되지만 병렬 실행은 10초 만에 모든 결과를 확인할 수 있다.
변경된 파일만 테스트하는 전략도 도입했다. git diff를 활용해 변경 사항만 Lint하고, Jest의 changedSince 옵션을 사용하여 테스트 범위를 좁혔다. 또한 Nx 도구를 활용하면 변경 사항의 영향을 받는 프로젝트만 빌드 및 테스트할 수 있어 효율적이다. Nx는 내부적으로 복잡한 캐싱 계산을 수행하며, 무료 플랜으로 월 2,000분 및 10GB 저장 공간을 제공한다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.