Phase 6레슨 28

CI/CD

Pipeline, Canary, Blue-Green, Rollback — 안전하게 배포하는 법

💡ELI5·

배포 전략 비유

Rolling:     구 버전을 하나씩 새 버전으로 교체
Blue-Green:  Blue(구) 전체 유지 → Green(신) 전체 배포 → 스위치
Canary:      5% → 25% → 50% → 100% 점진적 전환
Feature Flag: 코드 배포, 기능은 숨김 → 플래그 ON으로 활성화
💡 비유Rolling = 식당 메뉴를 하나씩 교체. Blue-Green = 새 식당을 미리 열어두고 손님을 한 번에 이동. Canary = 5명에게만 새 메뉴 맛보고 반응 보고 전체 출시. Feature Flag = 메뉴판에 올려두되 '품절' 표시 → 준비되면 '판매 중'으로 변경.
🔬Deep Dive·

배포 전략 비교

전략롤백 속도위험도자원적합
Rolling느림 (역순 교체)중간적음일반적 웹 서비스
Blue-Green매우 빠름 (스위치)전환 순간 높음2배 (두 환경)빠른 롤백 필요
Canary느림 (점진적 축소)낮음 (일부만)중간대규모, 위험 회피
Feature Flag즉시 (플래그 OFF)매우 낮음적음A/B 테스트, 점진적
💻Code·

GitHub Actions CI 예시

name: CI
on:
  push:
    branches: [main]
  pull_request:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - run: npm run lint      # 코드 품질
      - run: npm run typecheck  # 타입 검사
      - run: npm test           # 단위 테스트
      - run: npm run build      # 빌드 검증

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh canary 5  # 5% Canary 배포
🔬Deep Dive·

Feature Flag

// 코드는 배포되었지만 기능은 숨겨짐
if (featureFlag.isEnabled('new-checkout', user)) {
  return newCheckoutFlow();
} else {
  return oldCheckoutFlow();
}

// 런타임에 플래그 ON → 점진적 활성화 (5% → 50% → 100%)
// 문제 발생 시 플래그 OFF → 즉시 이전 버전 (재배포 불필요)
⚖️Trade-off·

CI/CD의 Trade-off

이점대가
빠른 배포 (수시간 → 수분)파이프라인 구축/유지 비용
자동화로 인적 오류 감소테스트 품질이 배포 품질 결정
빠른 롤백인프라 복잡성 (Blue-Green 2배)
점진적 배포로 위험 감소Canary 모니터링 인프라 필요

❓ 체크포인트 질문

  1. 1.CI와 CD의 차이는?
  2. 2.Canary 배포가 Blue-Green보다 안전한 이유는?
  3. 3.Rollback이 빠른 배포 전략은?
  4. 4.Feature Flag가 배포와 어떻게 다른가?
  5. 5.CI 파이프라인에 반드시 포함해야 할 단계는?