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