CI/CD 파이프라인 최적화: 빌드 시간을 절반으로 줄이는 3가지 비법
🎯 타겟 독자: "배포 버튼 눌렀는데 왜 20분이나 걸려?"라는 불만을 듣고 있는 데브옵스 엔지니어, GitHub Actions 무료 사용량을 다 써버린 스타트업 CTO.
📝 요약: 느린 CI/CD 파이프라인은 개발 생산성을 저하시키는 주범입니다. 이 글에서는 의존성 캐싱(Dependency Caching), 도커 레이어 캐싱, 그리고 병렬 실행(Parallelism) 전략을 통해 빌드 시간을 획기적으로 단축하는 실전 기법을 GitHub Actions와 GitLab CI 예제로 소개합니다.
1. 왜 최적화해야 하는가? (돈과 시간)
CI/CD 도구들은 대부분 '실행 분(Minute)' 단위로 과금합니다. 빌드 시간이 길어질수록 비용이 기하급수적으로 늘어납니다. 더 중요한 것은 개발자의 '몰입(Flow)'이 끊긴다는 점입니다. 배포 결과를 기다리는 15분 동안 개발자는 딴짓을 하게 됩니다.
2. 전략 ① 의존성 캐싱 (Dependency Caching)
매 빌드마다 npm install이나 mvn install을 새로 수행하여 수백 메가바이트의 라이브러리를 다운로드하는 것은 엄청난 낭비입니다.
GitHub Actions 예시
3. 전략 ② 도커 레이어 캐싱 (가장 효과 큼)
Docker 이미지를 빌드할 때 시간이 가장 많이 걸립니다. 하지만 코드가 한 줄 바뀌었다고 OS 설정부터 다시 빌드할 필요는 없습니다.
--cache-from 옵션을 사용하여 이전에 빌드한 이미지의 레이어를 재사용하세요.
4. 전략 ③ 병렬 실행 (Parallelism)
테스트 코드가 1000개라면 순서대로 실행하는 데 한세월이 걸립니다. 이를 여러 머신(Job)에 쪼개서 동시에 실행하면 시간을 획기적으로 줄일 수 있습니다.
GitLab CI 예시 (Matrix)
위 설정은 테스트 케이스를 4등분 하여 동시에 실행하므로, 이론상 테스트 시간이 1/4로 줄어듭니다.
5. 도구별 추천 기능 요약
| 기능 | GitHub Actions | GitLab CI |
|---|---|---|
| 캐싱 난이도 | 쉬움 (공식 Action 제공) | 보통 (S3/MinIO 설정 권장) |
| Docker 빌드 | Buildx 통합 우수 | Docker-in-Docker 설정 필요 |
| 무료 시간 | 월 2,000분 (Public 무료) | 월 400분 (SaaS 기준) |
6. 결론
CI/CD 최적화는 '캐싱'으로 시작해서 '병렬 처리'로 끝납니다.
가장 먼저 node_modules 같은 의존성 캐싱을 적용하세요. 그다음 Docker 레이어 캐싱을 적용하십시오. 이 두 가지만 해도 빌드 시간의 50% 이상을 단축할 수 있습니다. 10분 걸리던 빌드를 3분으로 줄이는 것, 그것이 바로 데브옵스의 핵심 성과입니다.