모노레포로 각 FE 저장소를 통합한 이후 팀 내외에서 CI/CD 개선 요구가 있어 이를 개선한 경험을 정리했습니다.
상황
-
파이프라인: Github → Jenkins → Docker build → ECR → EKS 배포
-
jenkins build 실행 시
-
조직 규모(FE팀 7명)에 비해 서비스가 많은 편으로, 20개 이상의 FE 앱 운영
-
일 평균 배포 횟수 20회 (개발 환경 70%, 운영 환경 30%, 월 400회)
-
가장 많이 배포되는 앱의 경우 평균 일 3회 배포, 최대 일 20회 배포 (개발 환경 포함)
-
Jenkins에서 Docker 이미지 빌드 후 ECR push, ArgoCD를 통해 배포
요약
아래 방법으로 CI/CD를 개선하여, 배포 소요시간이 약 66% 가량 감소했습니다. (12분 → 4분)
- 일부 항목은 로그를 통해 정확하게 측정되지 않았으나, 측정된 값을 바탕으로 대략적으로 추산하거나 실행 시간을 직접 측정했습니다.
- 네트워크 환경, 젠킨스 서버 부하 등 제어할 수 없는 환경 요소들로 인해 실제로는 편차가 있으나 평균적인 시간을 작성했습니다.
- yarn workspaces focus
- 의존성 설치 소요시간 70% 감소 (300초 → 90초, 3.5분 감소)
- alpine image & multi-stage builds
- Docker 이미지 크기 약 96% 감소 (6.53GB ⇒ 213MB)
- ECR push 시간 감소 (정확한 측정 X, 평균적으로 Jenkins Job 실행시간 10 - 15초 감소)
- Image pull 시간 감소 (정확한 측정 X, 기존 1-2분 소요 ⇒ 5-10초 소요)
- base image with .yarn/cache
- 베이스 이미지에 모노레포의 .yarn/cache 폴더를 복사하여 의존성 설치 속도를 개선하고, 네트워크를 통한 의존성 설치 수를 2개로 줄였습니다.
1. yarn workspaces focus: 패키지에 필요한 의존성만 설치
Docs: https://yarnpkg.com/cli/workspaces/focus