🔵🟢 Blue-Green Deployment
패턴 개요
Blue-Green Deployment는 두 개의 동일한 환경(Blue/Green)을 운영하며, 트래픽을 순간적으로 전환하여 무중단 배포를 구현하는 패턴입니다.
1. 핵심 개념
🎯 배포 프로세스
현재 상태:
Blue (v1.0) ← 모든 트래픽 (100%)
Green (idle) ← 트래픽 없음
배포:
1. Green에 v2.0 배포
2. Green 테스트
3. 트래픽 Blue → Green 전환 (순간 전환)
4. Green (v2.0) ← 모든 트래픽 (100%)
Blue (v1.0) ← 대기 (롤백용)
2. 구현 방법
💻 Kubernetes 구현
# Blue Deployment (v1.0)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-blue
labels:
app: myapp
version: blue
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: blue
template:
metadata:
labels:
app: myapp
version: blue
spec:
containers:
- name: myapp
image: myapp:1.0# Green Deployment (v2.0)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-green
labels:
app: myapp
version: green
spec:
replicas: 3
selector:
matchLabels:
app: myapp
version: green
template:
metadata:
labels:
app: myapp
version: green
spec:
containers:
- name: myapp
image: myapp:2.0# Service (트래픽 라우팅)
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
version: blue # 트래픽 → Blue
ports:
- port: 80
targetPort: 8080전환:
# Green으로 전환
kubectl patch service myapp-service -p '{"spec":{"selector":{"version":"green"}}}'
# 롤백 (Blue로 되돌림)
kubectl patch service myapp-service -p '{"spec":{"selector":{"version":"blue"}}}'🌐 AWS ELB 구현
# 1. Blue (현재) Target Group
aws elbv2 create-target-group \
--name myapp-blue-tg \
--protocol HTTP \
--port 80
# 2. Green (신규) Target Group
aws elbv2 create-target-group \
--name myapp-green-tg \
--protocol HTTP \
--port 80
# 3. Listener 규칙 변경 (Blue → Green)
aws elbv2 modify-listener \
--listener-arn $LISTENER_ARN \
--default-actions Type=forward,TargetGroupArn=$GREEN_TG_ARN3. 장단점
✅ 장점
-
즉시 롤백
- Blue로 즉시 복구 (1초)
-
무중단
- 다운타임 0
-
안전한 테스트
- Green 환경에서 충분한 검증
❌ 단점
-
리소스 2배
- Blue + Green 동시 운영
-
DB 마이그레이션 복잡
- 양방향 호환 필요
-
상태 유지 서비스 어려움
- 세션, WebSocket 처리 복잡
4. 사용 시기
✅ 적합한 경우
- 무중단 배포 필수
- 즉시 롤백 필요
- 충분한 인프라
❌ 부적합한 경우
- 리소스 제한적
- DB 마이그레이션 복잡
- 상태 유지 서비스
📚 참고 자료
상위 문서: 배포 인프라 패턴 폴더 마지막 업데이트: 2026-01-05