← 프로젝트

회사AI 게임 스타트업2026.09 – 2026.10진행 중

CI 파이프라인 경량화: PR 한 번 95분 → 10분

테스트 8,000건 규모가 된 백엔드 모노레포의 CI를 분할·병렬화·재실행 생략으로 줄여 월 예산 안에 넣었다.

PR 푸시 한 번
약 95분
8~10분
main 랜딩
12~25분
약 1분
역할
CI/CD 설계 · 비용 통제
기술
GitHub Actions · PostgreSQL (워커별 클러스터) · Docker · pnpm 모노레포
95 → 8~10분
PR 푸시 한 번 (좁은 백엔드 PR)
12~25 → 약 1분
main 랜딩 (검증된 트리 재실행 생략)
27.6분
통합 테스트 2,669건 (워커별 DB 클러스터 병렬)
3,878 → 8,100+
백엔드 테스트 수 (2026.09 → 10)

테스트가 두 달 사이 두 배로 늘면서 PR 한 번에 95분이 걸리고 CI 예산이 12일 만에 바닥났습니다. 15분 타임아웃 방지용 2샤드 분할부터 PR 차선과 main 차선 분리, 워커별 PostgreSQL 클러스터 병렬화, 검증된 트리의 재실행 생략까지 네 차례에 걸쳐 줄였습니다.

상황

백엔드 모노레포의 단위·통합 테스트는 9월 초 3,878건에서 10월 말 단위 5,284건과 통합 약 2,870건으로 늘었습니다. 한 잡에 몰아 돌리던 구조는 15분 타임아웃에 걸렸고, 모든 푸시에 전체 회귀를 돌리니 시간과 비용이 함께 폭발했습니다.

한 일

  1. 01

    1차: 분할

    단위 테스트와 통합 테스트를 격리하고 통합을 2샤드로 나눠 단위 4분 33초, 통합 6분 46초와 7분 49초로 타임아웃을 없앴습니다.

  2. 02

    2차: 차선 분리와 병렬화

    PR 차선과 main 차선을 분리해 PR 푸시 한 번을 약 95분에서 약 20분으로 줄였고, 통합 레그는 워커마다 PostgreSQL 클러스터를 띄워 병렬화해 2,669건을 27.6분에 끝냈습니다. 통합 전체는 nightly로 옮겼습니다.

  3. 03

    3·4차: 검증된 트리 재실행 생략

    같은 트리가 이미 통과했으면 다시 돌리지 않도록 해 좁은 백엔드 PR 8~10분, 넓은 PR 약 17분, main 랜딩과 무변경 nightly는 약 1분이 됐습니다. Actions 결제 한도에 걸렸을 때를 위해 로컬 게이트와 수동 배포 절차(스모크 196건)도 문서화했습니다.

결과

  • PR 푸시 한 번 약 95분 → 좁은 PR 8~10분, 넓은 PR 약 17분.
  • main 랜딩 12~25분 → 약 1분, 무변경 nightly 약 90분 → 약 1분.
  • 월 CI 예산 안에서 테스트 8,100건 이상 체제 유지.

정직하게 적어 두는 것

  • 소요 시간은 특정 시점 실측이며 테스트 수가 늘면 달라집니다.