Skip to content

[CI] 배포 파이프라인 시간 단축 — 이중 빌드 제거 + prune 완화 + .dockerignore 보강 #499

@minij02

Description

@minij02

✨ 기능 설명

2개 에이전트(Explore + architect) 교차 검증 결과, develop/main 배포가 3분+ 소요되는 가장 큰 원인이 EC2와 Docker 컨테이너 양쪽에서 동일 빌드 작업을 중복 실행하는 점으로 확인됨. CRITICAL 3건만 본 PR로 정리. 추가 최적화(BuildKit GHA cache 등)는 별도 이슈로 분리.

✨ 발견된 갭

1. 이중 빌드 (가장 큰 시간 낭비)

  • deploy-develop.yml:58 / deploy-main.yml:58"Install, Generate & Build on server" 단계가 컨테이너 빌드 직전에 동일 작업을 수행
  • 그러나 EC2 빌드의 산출물(dist/)은 컨테이너 빌드 시 어차피 버려짐 (Dockerfile 안에서 다시 pnpm install + prisma generate + tsc 수행)
  • 결과: ~80초 + ~70초 = 1분 30초의 작업이 100% 중복

2. BuildKit 캐시 파괴

  • deploy-develop.yml:69docker system prune -af가 BuildKit layer 캐시까지 전부 삭제
  • 매 배포가 cold build

3. .dockerignore 보강 필요

  • 현재 .dockerignore.github, tests, *.md, *.log 등 누락
  • 빌드 context 크기 불필요하게 큼

✨ 개발 목록

Commit 1 — 이중 빌드 제거 (deploy-develop / deploy-main)

  • deploy-develop.yml "Install, Generate & Build on server" 단계 삭제
  • deploy-main.yml 동일 단계 삭제
  • Prisma migrate가 EC2에서 필요한 경우만 별도 단계로 분리 (현재 main은 prisma migrate deploy 별도, develop은 db push — 정합화 검토)
  • 검토: prisma migrate를 EC2에서 실행하려면 node_modules가 최소한 prisma만 필요 — 컨테이너 안에서 docker compose exec로 실행하는 안 검토

Commit 2 — docker system prune 완화

  • prune -afprune -f --filter "until=168h" (7일 이상만 정리)
  • 또는 prune 단계 제거 + EC2 디스크 모니터링 별도 알람

Commit 3 — .dockerignore 보강

  • .github, tests, docs/, *.md, *.log, *.test.ts, coverage/ 추가
  • 누락된 dev 파일들 점검

검증

  • CI에서 직접 배포 트리거 1회 후 시간 측정 (전/후 비교)
  • 컨테이너 정상 기동 + healthcheck 통과
  • prisma migrate 정상 수행

✨ 별도 이슈로 분리 (HIGH 후속)

  • GitHub Actions docker/build-push-action@v5 + cache-from: type=gha 도입 (BuildKit layer 캐시 활용)
  • TypeScript incremental 빌드 (효과 제한적이라 후순위)

✨ 기타 / 질문

  • prisma migrate를 컨테이너 외부(EC2)에서 호출할지, 컨테이너 안에서 호출할지 — develop은 db push 매번이라 안전, main은 migrate deploy라 신중
  • 추정 효과: 3분+ → 1분 30초 ~ 1분 50초 (4050% 절감)

Metadata

Metadata

Assignees

Labels

fixfixing codes

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions