CI/CD 파이프라인 심화 — 빌드·테스트·배포 + 블루/그린·카나리
GitHub Actions로 빌드 → 테스트 → 배포 자동화, 무중단 배포 2가지 전략.
ch08-2에서 CI/CD 맛만 봤다. 실전에선 병렬 실행·캐시·시크릿·배포 전략 결정이 매일의 일. 이 토픽으로 AI가 생성한 워크플로우 YAML을 읽을 수 있게.
CI(Continuous Integration) = 매 푸시마다 빌드·테스트로 버그 조기 감지. CD(Continuous Delivery/Deployment) = 테스트 통과 시 자동으로 스테이징/프로덕션 배포. GitHub Actions·GitLab CI·CircleCI가 3대장.
# .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배 잠시 |
| Canary | 5%→25%→100% 점진 증가 | 위험 최소 | 파이프라인 복잡 |
| Feature Flag | 코드는 배포, 기능 스위치 | 즉시 on/off | 코드 복잡 |
# 카나리 배포 예시 (개념)
# 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 읽고 고칠 줄 아는 게 바이브코더의 기본.
트래픽을 5%→25%→100%로 점진 증가시키며 배포하는 전략의 이름은?
GitHub Actions YAML에 DB 비밀번호를 평문으로 적어도 Private 레포이므로 안전하다.