🔧
DevOps
Rollback
롤백
배포 실패 시 이전 버전으로 복원. CI/CD 필수 기능.
롤백
배포 실패 시 이전 버전으로 복원. CI/CD 필수 기능.
Rollback(롤백)은 배포된 애플리케이션에 문제가 발생했을 때 이전의 안정적인 버전으로 신속하게 되돌리는 작업입니다. 현대 CI/CD 파이프라인에서 롤백 기능은 서비스 연속성을 보장하는 핵심 안전 장치입니다.
롤백은 단순히 코드를 되돌리는 것 이상으로, 데이터베이스 마이그레이션, 환경 설정, 인프라 상태까지 고려해야 합니다. 자동 롤백 정책을 구현하면 장애 발생 시 MTTR(Mean Time To Recovery)을 수 분 내로 단축할 수 있습니다. Kubernetes는 기본적으로 이전 3개 버전의 ReplicaSet을 유지하여 즉각적인 롤백을 지원합니다.
# deployment.yaml - 롤백 가능한 배포 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
annotations:
kubernetes.io/change-cause: "v2.1.0 - 결제 API 개선"
spec:
replicas: 3
revisionHistoryLimit: 5 # 롤백 가능한 버전 수
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
version: "v2.1.0"
spec:
containers:
- name: api
image: myapp/api-server:v2.1.0
ports:
- containerPort: 8080
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
#!/bin/bash
# auto-rollback.sh - 헬스체크 기반 자동 롤백
DEPLOYMENT="api-server"
NAMESPACE="production"
MAX_RETRIES=5
RETRY_COUNT=0
echo "배포 상태 모니터링 시작..."
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
# 배포 상태 확인
STATUS=$(kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPACE --timeout=60s 2>&1)
if echo "$STATUS" | grep -q "successfully rolled out"; then
echo "배포 성공!"
exit 0
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
echo "헬스체크 실패 ($RETRY_COUNT/$MAX_RETRIES)"
sleep 10
done
echo "배포 실패 감지 - 롤백 시작"
# 이전 버전으로 롤백
kubectl rollout undo deployment/$DEPLOYMENT -n $NAMESPACE
# 롤백 완료 대기
kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPACE
# 알림 전송
curl -X POST $SLACK_WEBHOOK \
-H 'Content-type: application/json' \
-d "{\"text\":\"$DEPLOYMENT 자동 롤백 완료\"}"