devopscigithub-actions
GitHub Actions 캐시로 CI 3배 빠르게 만들기
✨ AI 요약
긴 글, 핵심만 먼저 — 이 글을 3줄로 정리해드려요.
조회 16
CI가 느리면 아무도 CI를 기다리지 않고, 기다리지 않으면 머지 전 확인이 사라진다. CI 속도는 개발 문화 문제다. GitHub Actions에서 체감이 큰 순서대로 정리한다.
의존성 캐시가 기본
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
setup-node의 cache 옵션 한 줄이면 npm 캐시가 붙는다. 직접 actions/cache를 쓰는 것보다 관리가 편하다. lockfile 해시가 키가 되므로 의존성이 안 바뀌면 install이 수십 초에서 몇 초로 준다.
node_modules 자체를 캐싱하지 말 것
npm 캐시(~/.npm)가 아니라 node_modules를 통째로 캐싱하는 예제가 많은데, OS/노드 버전이 바뀌면 네이티브 모듈이 깨진다. 복원 후 npm ci를 생략하는 구성은 특히 위험하다.
빌드 캐시
Next.js라면 .next/cache를 별도로 캐싱하면 빌드가 크게 빨라진다.
- uses: actions/cache@v4
with:
path: .next/cache
key: next-${{ hashFiles('package-lock.json') }}-${{ hashFiles('src/**') }}
restore-keys: next-${{ hashFiles('package-lock.json') }}-
restore-keys 덕분에 소스가 바뀌어도 가장 가까운 캐시에서 시작한다.
잡 분리와 concurrency
lint / typecheck / test를 병렬 잡으로 나누면 벽시계 시간이 준다. 그리고 같은 브랜치의 이전 실행을 취소하는 concurrency 설정은 러너 낭비를 막는 필수 옵션이다.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
우리 프로젝트는 이 네 가지로 평균 6분짜리 CI가 2분 안쪽으로 들어왔다.