deploy.yml Improvement Plan
This content is not available in your language yet.
분석 일시
섹션 제목: “분석 일시”2026-01-28
📊 현재 상태 분석
섹션 제목: “📊 현재 상태 분석”파일 통계
섹션 제목: “파일 통계”- 총 라인 수: 428줄
- Job 수: 4개 (validate, provision, deploy, deploy-production)
- 중복된 Step 패턴: 4곳에서 반복
🔴 발견된 문제점
섹션 제목: “🔴 발견된 문제점”1. 중복된 Setup Steps (Critical)
섹션 제목: “1. 중복된 Setup Steps (Critical)”문제: 다음 5개 step이 모든 job에서 반복됨
- name: Checkout- name: Setup Environment- name: Setup pnpm- name: Setup Node.js- name: Install dependencies반복 횟수: 4번 (validate, provision, deploy, deploy-production)
영향:
- 코드 중복: ~100줄 중복
- 유지보수 어려움: 한 곳 수정 시 4곳 모두 수정 필요
- 실수 가능성: 한 곳만 수정하고 나머지 놓칠 수 있음
2. 중복된 환경 변수 설정 (High)
섹션 제목: “2. 중복된 환경 변수 설정 (High)”문제 A: Debug 환경 변수 중복
env: ACTIONS_STEP_DEBUG: true ACTIONS_RUNNER_DEBUG: true반복 횟수: 4번 (모든 job)
문제 B: GitHub Context 환경 변수 중복
env: GITHUB_SHA: ${{ github.sha }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }}반복 횟수: 4번 (모든 job)
문제 C: Cloudflare 인증 정보 중복
env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}반복 횟수: 8번 이상 (여러 step에서)
3. 중복된 “Determine environment” 로직 (Medium)
섹션 제목: “3. 중복된 “Determine environment” 로직 (Medium)”문제: 같은 로직이 provision과 deploy에서 반복됨
- name: Determine environment id: env run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT else echo "environment=staging" >> $GITHUB_OUTPUT fi반복 횟수: 2번 (provision, deploy)
문제점:
- deploy-production에서는 하드코딩된 “production” 사용
- 일관성 부족
4. 중복된 tmate Session 설정 (Low)
섹션 제목: “4. 중복된 tmate Session 설정 (Low)”문제: tmate 설정이 모든 job에서 반복됨
- name: Setup tmate session (on failure) if: failure() uses: mxschmitt/action-tmate@v3 with: limit-access-to-actor: true connect-timeout-seconds: 1800반복 횟수: 4번
5. deploy-production Job의 중복 작업 (High)
섹션 제목: “5. deploy-production Job의 중복 작업 (High)”문제: deploy-production job에서 이미 완료된 작업을 다시 실행
중복 작업:
- Provision Cloudflare Resources (이미 provision job에서 완료)
- Verify Resources (이미 provision job에서 완료)
- Validate wrangler.jsonc (이미 provision job에서 완료)
문제점:
- 불필요한 시간 소비
- 리소스 낭비
- deploy job에서 이미 배포했는데 다시 프로비저닝
현재 로직:
validate → provision → deploy → deploy-production ↑ └─ 이미 배포 완료deploy-production이 다시 하는 일:
- Provision (불필요 - 이미 provision job에서 완료)
- Verify (불필요 - 이미 provision job에서 완료)
- Validate (불필요 - 이미 provision job에서 완료)
- Deploy (필요 - production 환경으로 배포)
6. 환경 변수 전달 중복 (Medium)
섹션 제목: “6. 환경 변수 전달 중복 (Medium)”문제: 같은 환경 변수를 여러 step에서 반복 설정
예시:
# Deploy stepenv: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} DEPLOY_ENV: ${{ steps.env.outputs.environment }} GITHUB_SHA: ${{ github.sha }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }} BUILD_VERSION: $(date -u +%Y-%m-%dT%H%M%SZ) BUILD_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ) GIT_COMMIT: ${{ github.sha }} CF_ENV: ${{ steps.env.outputs.environment }}
# Post-deployment Log Check stepenv: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}문제점:
- GIT_COMMIT과 GITHUB_SHA 중복
- CF_ENV와 DEPLOY_ENV 중복
- 같은 인증 정보를 여러 step에서 반복
7. 불필요한 “Run Tests” Step (Low)
섹션 제목: “7. 불필요한 “Run Tests” Step (Low)”문제: validate job에서 테스트를 스킵하는 step이 있음
- name: Run Tests run: | echo "⏭️ Tests skipped in CI (optimization)" echo "💡 Please run 'pnpm test' locally before pushing" echo "💡 Or run 'pnpm run validate:local' for complete validation" echo "✅ Assuming tests passed locally" continue-on-error: true문제점:
- 실제로 아무것도 하지 않음
- CI 시간만 소비
- 주석으로 대체 가능
🎯 개선 기획안
섹션 제목: “🎯 개선 기획안”Phase 1: Composite Actions로 Setup Steps 통합 (High Priority)
섹션 제목: “Phase 1: Composite Actions로 Setup Steps 통합 (High Priority)”1.1 Setup Composite Action 생성
섹션 제목: “1.1 Setup Composite Action 생성”목적: 반복되는 setup steps를 재사용 가능한 composite action으로 추출
구조:
.github/actions/setup-project/action.yml내용:
name: 'Setup Project'description: 'Setup Node.js, pnpm, and install dependencies'
inputs: node-version: description: 'Node.js version' required: false default: '20' pnpm-version: description: 'pnpm version' required: false default: '9'
runs: using: 'composite' steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0
- name: Setup Environment shell: bash run: | chmod +x .github/scripts/setup.sh ./.github/scripts/setup.sh env: GITHUB_SHA: ${{ github.sha }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }}
- name: Setup pnpm uses: pnpm/action-setup@v4 with: version: ${{ inputs.pnpm-version }}
- name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ inputs.node-version }} cache: "pnpm"
- name: Install dependencies shell: bash run: pnpm install --frozen-lockfile사용법:
- name: Setup Project uses: ./.github/actions/setup-project효과:
- 중복 코드 제거: ~100줄 → 1줄
- 유지보수성 향상: 한 곳만 수정
- 일관성 보장: 모든 job에서 동일한 setup
Phase 2: Workflow-level 환경 변수 설정 (High Priority)
섹션 제목: “Phase 2: Workflow-level 환경 변수 설정 (High Priority)”2.1 Workflow-level env 설정
섹션 제목: “2.1 Workflow-level env 설정”목적: 공통 환경 변수를 workflow 레벨에서 한 번만 설정
구조:
env: # Debug mode (모든 job에 적용) ACTIONS_STEP_DEBUG: true ACTIONS_RUNNER_DEBUG: true
# GitHub Context (모든 job에 적용) GITHUB_SHA: ${{ github.sha }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }}
# Cloudflare 인증 (보안 주의 - secrets는 job 레벨에서만) # CLOUDFLARE_API_TOKEN은 secrets이므로 job 레벨에서만 설정
jobs: validate: # env는 상속됨 steps: ...효과:
- 중복 제거: 4곳 → 1곳
- 유지보수성 향상
- 일관성 보장
주의사항:
- Secrets는 workflow-level env에 설정 불가 (GitHub 제한)
- Secrets는 각 job/step에서 개별 설정 필요
Phase 3: “Determine environment” 로직 통합 (Medium Priority)
섹션 제목: “Phase 3: “Determine environment” 로직 통합 (Medium Priority)”3.1 Workflow-level 환경 결정
섹션 제목: “3.1 Workflow-level 환경 결정”방안 A: Workflow-level output 사용 (불가능 - GitHub Actions 제한)
방안 B: Reusable workflow 사용 (복잡함)
방안 C: Composite Action으로 추출
구조:
.github/actions/determine-environment/action.yml내용:
name: 'Determine Environment'description: 'Determine deployment environment from workflow inputs'
outputs: environment: description: 'Deployment environment' value: ${{ steps.env.outputs.environment }}
runs: using: 'composite' steps: - id: env shell: bash run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "environment=${{ github.event.inputs.environment }}" >> $GITHUB_OUTPUT else echo "environment=staging" >> $GITHUB_OUTPUT fi사용법:
- name: Determine environment id: env uses: ./.github/actions/determine-environment
- name: Some step env: DEPLOY_ENV: ${{ steps.env.outputs.environment }}효과:
- 중복 제거: 2곳 → 1곳 (재사용)
- 일관성 보장
Phase 4: deploy-production Job 최적화 (High Priority)
섹션 제목: “Phase 4: deploy-production Job 최적화 (High Priority)”4.1 문제 분석
섹션 제목: “4.1 문제 분석”현재 구조:
validate → provision → deploy → deploy-production ↑ └─ 이미 staging/production 배포 완료deploy-production의 불필요한 작업:
- ❌ Provision Cloudflare Resources (이미 provision job에서 완료)
- ❌ Verify Resources (이미 provision job에서 완료)
- ❌ Validate wrangler.jsonc (이미 provision job에서 완료)
- ✅ Deploy to Production (필요)
4.2 개선 방안
섹션 제목: “4.2 개선 방안”방안 A: deploy-production 단순화
deploy-production: name: Deploy to Production runs-on: ubuntu-latest needs: [validate, provision, deploy] if: github.event.inputs.environment == 'production' environment: production
steps: - name: Setup Project uses: ./.github/actions/setup-project
- name: Deploy to Production run: | chmod +x .github/scripts/steps/deploy.sh ./.github/scripts/steps/deploy.sh env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} DEPLOY_ENV: production # ... 기타 환경 변수
- name: Post-deployment Log Check # ...
- name: Production Deployment Summary # ...효과:
- 불필요한 작업 제거: Provision, Verify, Validate 제거
- 시간 단축: ~5-10분 절약
- 리소스 절약
주의사항:
- deploy job이 staging으로 배포했을 수도 있음
- production 배포는 별도로 필요
Phase 5: tmate Session 설정 통합 (Low Priority)
섹션 제목: “Phase 5: tmate Session 설정 통합 (Low Priority)”5.1 Composite Action으로 추출
섹션 제목: “5.1 Composite Action으로 추출”구조:
.github/actions/setup-tmate/action.yml내용:
name: 'Setup tmate Session'description: 'Setup tmate session for debugging on failure'
runs: using: 'composite' steps: - name: Setup tmate session (on failure) if: failure() uses: mxschmitt/action-tmate@v3 with: limit-access-to-actor: true connect-timeout-seconds: 1800사용법:
- name: Setup tmate session uses: ./.github/actions/setup-tmate효과:
- 중복 제거: 4곳 → 1곳
- 유지보수성 향상
Phase 6: 환경 변수 그룹화 (Medium Priority)
섹션 제목: “Phase 6: 환경 변수 그룹화 (Medium Priority)”6.1 Cloudflare 인증 정보 그룹화
섹션 제목: “6.1 Cloudflare 인증 정보 그룹화”현재: 각 step마다 개별 설정
env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}개선: Job-level env로 설정
jobs: deploy: env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
steps: - name: Deploy # env는 상속됨 run: ...효과:
- 중복 제거
- 보안: secrets를 한 곳에서만 관리
6.2 빌드 메타데이터 통합
섹션 제목: “6.2 빌드 메타데이터 통합”현재: 중복된 환경 변수
BUILD_VERSION: $(date -u +%Y-%m-%dT%H%M%SZ)BUILD_TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%SZ)GIT_COMMIT: ${{ github.sha }} # GITHUB_SHA와 중복CF_ENV: ${{ steps.env.outputs.environment }} # DEPLOY_ENV와 중복개선: 중복 제거 및 통합
env: DEPLOY_ENV: ${{ steps.env.outputs.environment }} GITHUB_SHA: ${{ github.sha }} # BUILD_VERSION, BUILD_TIMESTAMP는 deploy.sh에서 생성 # GIT_COMMIT 제거 (GITHUB_SHA 사용) # CF_ENV 제거 (DEPLOY_ENV 사용)Phase 7: 불필요한 Step 제거 (Low Priority)
섹션 제목: “Phase 7: 불필요한 Step 제거 (Low Priority)”7.1 “Run Tests” Step 제거
섹션 제목: “7.1 “Run Tests” Step 제거”현재:
- name: Run Tests run: | echo "⏭️ Tests skipped in CI (optimization)" # ... 메시지만 출력 continue-on-error: true개선: 완전 제거 또는 주석으로 대체
효과:
- CI 시간 절약: ~5초
- 코드 간소화
📊 개선 효과 예상
섹션 제목: “📊 개선 효과 예상”Before (현재)
섹션 제목: “Before (현재)”- 총 라인 수: 428줄
- 중복 코드: ~150줄
- Setup steps 반복: 4번
- 환경 변수 반복: 10+ 곳
- deploy-production 불필요 작업: 3개
After (개선 후)
섹션 제목: “After (개선 후)”- 총 라인 수: ~250줄 (42% 감소)
- 중복 코드: ~20줄 (87% 감소)
- Setup steps: Composite action으로 1줄
- 환경 변수: Workflow-level로 통합
- deploy-production: 필수 작업만 수행
🎯 구현 우선순위
섹션 제목: “🎯 구현 우선순위”Phase 1: Critical (즉시 구현)
섹션 제목: “Phase 1: Critical (즉시 구현)”-
✅ Setup Composite Action 생성
- 효과: 중복 코드 100줄 제거
- 난이도: 낮음
- 시간: 30분
-
✅ deploy-production Job 최적화
- 효과: 불필요한 작업 제거, 시간 절약
- 난이도: 낮음
- 시간: 15분
Phase 2: High (우선 구현)
섹션 제목: “Phase 2: High (우선 구현)”-
✅ Workflow-level 환경 변수 설정
- 효과: 중복 제거, 일관성 향상
- 난이도: 낮음
- 시간: 20분
-
✅ Job-level Cloudflare 인증 정보
- 효과: 중복 제거, 보안 향상
- 난이도: 낮음
- 시간: 15분
Phase 3: Medium (선택적 구현)
섹션 제목: “Phase 3: Medium (선택적 구현)”-
✅ Determine environment Composite Action
- 효과: 중복 제거, 재사용성 향상
- 난이도: 중간
- 시간: 20분
-
✅ 환경 변수 중복 제거
- 효과: 코드 간소화
- 난이도: 낮음
- 시간: 15분
Phase 4: Low (선택적 구현)
섹션 제목: “Phase 4: Low (선택적 구현)”-
✅ tmate Session Composite Action
- 효과: 중복 제거
- 난이도: 낮음
- 시간: 10분
-
✅ 불필요한 Step 제거
- 효과: CI 시간 절약
- 난이도: 매우 낮음
- 시간: 5분
📋 상세 개선 계획
섹션 제목: “📋 상세 개선 계획”1. Composite Actions 구조
섹션 제목: “1. Composite Actions 구조”.github/├── actions/│ ├── setup-project/│ │ └── action.yml│ ├── determine-environment/│ │ └── action.yml│ └── setup-tmate/│ └── action.yml└── workflows/ └── deploy.yml2. Workflow 구조 개선
섹션 제목: “2. Workflow 구조 개선”Before:
jobs: validate: steps: - Checkout - Setup Environment - Setup pnpm - Setup Node.js - Install dependencies # ... validation steps
provision: steps: - Checkout - Setup Environment - Setup pnpm - Setup Node.js - Install dependencies # ... provision stepsAfter:
env: ACTIONS_STEP_DEBUG: true ACTIONS_RUNNER_DEBUG: true GITHUB_SHA: ${{ github.sha }} GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_RUN_ID: ${{ github.run_id }} GITHUB_RUN_NUMBER: ${{ github.run_number }}
jobs: validate: steps: - name: Setup Project uses: ./.github/actions/setup-project # ... validation steps
provision: env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} steps: - name: Setup Project uses: ./.github/actions/setup-project - name: Determine environment id: env uses: ./.github/actions/determine-environment # ... provision steps🔍 추가 개선 사항
섹션 제목: “🔍 추가 개선 사항”1. deploy-production Job 로직 개선
섹션 제목: “1. deploy-production Job 로직 개선”현재 문제:
if: github.event.inputs.environment == 'production'조건- 하지만 deploy job에서 이미 배포했을 수 있음
개선 방안:
- deploy job은 staging만 배포
- deploy-production job은 production만 배포
- 또는 deploy job에서 환경에 따라 분기
2. 환경 변수 일관성
섹션 제목: “2. 환경 변수 일관성”현재:
DEPLOY_ENV와CF_ENV중복GITHUB_SHA와GIT_COMMIT중복
개선:
- 하나로 통일
- 문서화
3. Timeout 설정 통합
섹션 제목: “3. Timeout 설정 통합”현재: 각 job마다 개별 설정
validate: timeout-minutes: 10provision: timeout-minutes: 10deploy: timeout-minutes: 15deploy-production: timeout-minutes: 30개선: 상수로 정의하거나 주석으로 명확화
📝 체크리스트
섹션 제목: “📝 체크리스트”Critical
섹션 제목: “Critical”- Setup Composite Action 생성
- deploy-production Job 최적화
High
섹션 제목: “High”- Workflow-level 환경 변수 설정
- Job-level Cloudflare 인증 정보
Medium
섹션 제목: “Medium”- Determine environment Composite Action
- 환경 변수 중복 제거
Low
섹션 제목: “Low”- tmate Session Composite Action
- 불필요한 Step 제거
예상 개선 효과
섹션 제목: “예상 개선 효과”코드 품질
섹션 제목: “코드 품질”- ✅ 중복 코드: 150줄 → 20줄 (87% 감소)
- ✅ 총 라인 수: 428줄 → 250줄 (42% 감소)
- ✅ 유지보수성: 크게 향상
- ✅ CI 시간: deploy-production에서 ~5-10분 절약
- ✅ 리소스 사용: 불필요한 작업 제거
가독성
섹션 제목: “가독성”- ✅ 코드 구조: 명확하고 간결
- ✅ 재사용성: Composite Actions로 향상
작성 일시: 2026-01-28
우선순위: High
예상 소요 시간: 2-3시간 (단계별 구현)