topic난이도 · 약 25

CI/CD 파이프라인 심화 — 빌드·테스트·배포 + 블루/그린·카나리

GitHub Actions로 빌드 → 테스트 → 배포 자동화, 무중단 배포 2가지 전략.

#CI/CD#GitHub Actions#Blue/Green#Canary#YAML
왜 배우는가

ch08-2에서 CI/CD 맛만 봤다. 실전에선 병렬 실행·캐시·시크릿·배포 전략 결정이 매일의 일. 이 토픽으로 AI가 생성한 워크플로우 YAML을 읽을 수 있게.

CI(Continuous Integration) = 매 푸시마다 빌드·테스트로 버그 조기 감지. CD(Continuous Delivery/Deployment) = 테스트 통과 시 자동으로 스테이징/프로덕션 배포. GitHub Actions·GitLab CI·CircleCI가 3대장.

yaml
# .github/workflows/ci.yml — 실전 템플릿
name: CI

on:
  push:     { branches: [main] }
  pull_request: { branches: [main] }

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "20"
          cache: "npm"                 # 의존성 캐시 — 2번째 실행부터 수분 단축
      - run: npm ci
      - run: npm run lint
      - run: npm run type-check
      - run: npm test -- --coverage

  e2e:                                 # 병렬로 다른 job
    runs-on: ubuntu-latest
    needs: test
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm ci
      - run: npx playwright install --with-deps
      - run: npm run test:e2e

  deploy:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    needs: [test, e2e]                 # 둘 다 통과해야 배포
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run build
      - name: Deploy to Vercel
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
        run: npx vercel deploy --prod --token $VERCEL_TOKEN

`needs:`로 순서를 걸되, `test`·`e2e`를 따로 두면 병렬 실행 가능. 테스트 10분 + E2E 10분 = 각각 10분 (순차면 20분).

비밀 관리. DB 비번·API 키는 GitHub Secrets에. `secrets.VERCEL_TOKEN`처럼 참조. 절대 YAML에 평문 금지. PR에서 secret 접근 제한 설정도 필수(Fork PR 공격 방지).

무중단 배포 2대 전략.

전략방식장점단점
Rolling인스턴스 N개를 순차 교체단순·K8s 기본구·신 버전 공존 기간
Blue/Green새 환경 띄우고 트래픽 전환즉각 롤백비용 2배 잠시
Canary5%→25%→100% 점진 증가위험 최소파이프라인 복잡
Feature Flag코드는 배포, 기능 스위치즉시 on/off코드 복잡
yaml
# 카나리 배포 예시 (개념)
# 1) 새 버전을 5% 트래픽으로 배포
# 2) 에러율·지연 모니터링 (Datadog·New Relic)
# 3) 이상 없으면 25% → 50% → 100% 점진 증가
# 4) 이상 있으면 즉시 롤백

# Vercel·Netlify는 PR별 Preview URL 자동 생성 → 사실상 수동 카나리
# K8s는 Argo Rollouts·Flagger가 자동 카나리

바이브코더 대부분은 Vercel Preview + 본인 테스트 → 프로덕션 승격. 자동 카나리까지 가면 대규모 조직.

"pipelines as code"가 기본. 파이프라인 정의를 레포에 둠 → 변경 이력 추적 가능. Jenkins GUI 시대는 지나감. YAML 읽고 고칠 줄 아는 게 바이브코더의 기본.

실기 드릴 2문항
edit실기 드릴 · 단답형

트래픽을 5%→25%→100%로 점진 증가시키며 배포하는 전략의 이름은?

check_circle실기 드릴 · OX

GitHub Actions YAML에 DB 비밀번호를 평문으로 적어도 Private 레포이므로 안전하다.