배포 전략 카탈로그. Blue-Green/Canary/Rolling/A-B Test/Shadow 배포 전략별 장단점, 구현 패턴, 롤백 절차, 헬스체크 설계, DORA 메트릭을 제공하는 pipeline-designer 확장 스킬. '배포 전략', 'Blue-Green', 'Canary', 'Rolling', '롤백', '무중단 배포', 'DORA 메트릭' 등 배포 파이프라인 설계 시 사용한다. 단, 실제 인프라 구성이나 모니터링 도구 설정은 이 스킬의 범위가 아니다.
Scanned 5/29/2026
Install via CLI
openskills install revfactory/harness-100---
name: deployment-strategies
description: "배포 전략 카탈로그. Blue-Green/Canary/Rolling/A-B Test/Shadow 배포 전략별 장단점, 구현 패턴, 롤백 절차, 헬스체크 설계, DORA 메트릭을 제공하는 pipeline-designer 확장 스킬. '배포 전략', 'Blue-Green', 'Canary', 'Rolling', '롤백', '무중단 배포', 'DORA 메트릭' 등 배포 파이프라인 설계 시 사용한다. 단, 실제 인프라 구성이나 모니터링 도구 설정은 이 스킬의 범위가 아니다."
---
# Deployment Strategies — 배포 전략 카탈로그
pipeline-designer 에이전트가 배포 파이프라인 설계 시 활용하는 배포 전략, 롤백 절차, 헬스체크, DORA 메트릭 레퍼런스.
## 대상 에이전트
`pipeline-designer` — 이 스킬의 배포 전략과 롤백 패턴을 파이프라인 설계에 직접 적용한다.
## 배포 전략 비교
| 전략 | 다운타임 | 위험도 | 인프라 비용 | 롤백 속도 | 적합 상황 |
|------|---------|--------|-----------|----------|----------|
| **Rolling** | 없음 | 중간 | 낮음 | 중간 | 일반 웹서비스 |
| **Blue-Green** | 없음 | 낮음 | 2배 | 즉각 | 미션 크리티컬 |
| **Canary** | 없음 | 매우 낮음 | 약간 추가 | 즉각 | 대규모 트래픽 |
| **Recreate** | 있음 | 높음 | 없음 | 느림 | 개발/스테이징 |
| **A/B Test** | 없음 | 낮음 | 약간 추가 | 즉각 | 기능 실험 |
| **Shadow** | 없음 | 없음 | 2배 | 불필요 | 성능/호환성 검증 |
## 전략별 상세
### 1. Rolling Update (순차 교체)
```
서버 풀: [v1] [v1] [v1] [v1]
단계 1: [v2] [v1] [v1] [v1] -- 1대 교체
단계 2: [v2] [v2] [v1] [v1] -- 2대 교체
단계 3: [v2] [v2] [v2] [v1] -- 3대 교체
단계 4: [v2] [v2] [v2] [v2] -- 완료
```
**설정 파라미터**:
- `maxUnavailable`: 동시에 내릴 수 있는 최대 수 (1 또는 25%)
- `maxSurge`: 동시에 추가할 수 있는 최대 수 (1 또는 25%)
**Kubernetes 예시**:
```yaml
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
```
**장점**: 추가 인프라 최소, 점진적 교체
**단점**: v1+v2 공존 기간 발생 (호환성 필요)
### 2. Blue-Green (청록 배포)
```
Blue (현재): [v1] [v1] [v1] ← 트래픽 100%
Green (대기): [v2] [v2] [v2] ← 트래픽 0%
전환:
Blue: [v1] [v1] [v1] ← 트래픽 0% (대기/제거)
Green: [v2] [v2] [v2] ← 트래픽 100%
```
**절차**:
1. Green 환경에 새 버전 배포
2. Green에서 스모크 테스트/헬스체크
3. 로드밸런서 트래픽 전환 (Green으로)
4. Blue 환경 모니터링 (롤백 대비)
5. 안정화 후 Blue 제거 또는 다음 배포 대기
**롤백**: 로드밸런서를 Blue로 재전환 (수초 이내)
### 3. Canary (카나리 배포)
```
단계 1: [v1 x 95%] [v2 x 5%] -- 5% 트래픽으로 시작
단계 2: [v1 x 80%] [v2 x 20%] -- 메트릭 정상 시 확대
단계 3: [v1 x 50%] [v2 x 50%] -- 추가 확대
단계 4: [v2 x 100%] -- 전체 전환
```
**단계별 검증 기준**:
| 단계 | 트래픽 | 대기 시간 | 검증 |
|------|--------|----------|------|
| 1 | 5% | 10~30분 | 에러율, 레이턴시 |
| 2 | 20% | 30~60분 | 비즈니스 메트릭 추가 |
| 3 | 50% | 1~2시간 | 전체 메트릭 |
| 4 | 100% | - | 완료 |
**자동 롤백 조건**:
- 에러율 > 1% (평소 대비 2배)
- p99 레이턴시 > 2초 (평소 대비 50% 증가)
- 비즈니스 메트릭 이상 (전환율, 매출 등)
### 4. A/B Testing (기능 실험)
- 사용자 세그먼트 기반 트래픽 분리
- Feature Flag 시스템과 연동
- 통계적 유의성 확보 후 결정
### 5. Shadow (미러링)
- 프로덕션 트래픽을 새 버전에 복제 (응답은 무시)
- 성능, 에러, 호환성 검증에만 사용
- 사용자 영향 zero
## 헬스체크 설계
### 3단계 헬스체크
| 유형 | 검증 대상 | 엔드포인트 | 주기 |
|------|----------|----------|------|
| **Liveness** | 프로세스 생존 | `/healthz` | 10초 |
| **Readiness** | 트래픽 수신 가능 | `/readyz` | 5초 |
| **Startup** | 초기화 완료 | `/healthz` | 1초 (최대 300초) |
### 헬스체크 응답 구조
```json
{
"status": "healthy",
"version": "2.1.0",
"uptime": 86400,
"checks": {
"database": { "status": "healthy", "latency": "2ms" },
"redis": { "status": "healthy", "latency": "1ms" },
"external_api": { "status": "degraded", "latency": "500ms" }
}
}
```
### Kubernetes Probe 설정
```yaml
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /readyz
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 3
```
## 롤백 절차
### 자동 롤백 트리거
| 지표 | 임계값 | 대기 시간 |
|------|--------|----------|
| HTTP 5xx 비율 | > 5% | 2분 연속 |
| 레이턴시 p99 | > 3초 | 5분 연속 |
| Pod 재시작 | > 3회 | 10분 이내 |
| 메모리/CPU | > 90% | 5분 연속 |
### 롤백 절차
```
1. 트리거 감지 → 자동 알림 (Slack/PagerDuty)
2. 이전 버전으로 즉시 전환
- Blue-Green: 로드밸런서 전환
- Canary: 카나리 트래픽 0%로
- Rolling: kubectl rollout undo
3. 근본 원인 분석 (RCA)
4. 수정 후 재배포
```
## DORA 메트릭
### 4대 핵심 메트릭
| 메트릭 | 설명 | Elite | High | Medium | Low |
|--------|------|-------|------|--------|-----|
| **배포 빈도** | 프로덕션 배포 주기 | 수시 (일 다회) | 일~주 1회 | 월 1회 | 월 1회 미만 |
| **리드 타임** | 커밋→배포 시간 | < 1시간 | 1일~1주 | 1주~1개월 | 1개월+ |
| **변경 실패율** | 배포 후 장애 비율 | < 5% | 6~15% | 16~30% | > 30% |
| **복구 시간** | 장애→복구 시간 | < 1시간 | < 1일 | 1일~1주 | 1주+ |
### 측정 자동화
```
배포 빈도 = 프로덕션 배포 이벤트 카운트 / 기간
리드 타임 = 프로덕션 배포 시간 - 첫 커밋 시간
변경 실패율 = 롤백 배포 수 / 전체 배포 수 x 100
복구 시간 = 인시던트 해결 시간 - 인시던트 발생 시간
```
## 브랜치 전략과 배포 매핑
| 브랜치 전략 | 배포 흐름 | 적합 |
|-----------|----------|------|
| **Trunk-Based** | main → 스테이징 → 프로덕션 | 소규모 팀, 빈번한 배포 |
| **GitHub Flow** | feature → PR → main → 프로덕션 | 중규모 팀, CI/CD 성숙 |
| **GitFlow** | feature → develop → release → main | 대규모, 릴리스 주기 고정 |
### 환경별 자동 배포 규칙
```
feature/* → PR → 프리뷰 환경 (ephemeral)
main → 자동 → 스테이징 (자동 테스트)
main + tag → 수동 승인 → 프로덕션
hotfix/* → 긴급 → 프로덕션 (승인 간소화)
```
No comments yet. Be the first to comment!