🔧 DevOps

롤백

Rollback

배포 실패 시 이전 버전으로 되돌리는 작업. CI/CD 파이프라인의 필수 기능.

상세 설명

롤백(Rollback)은 배포나 변경 작업 실패 시 이전의 안정적인 상태로 되돌리는 작업입니다. 시스템 안정성을 보장하는 마지막 방어선으로, 모든 배포 시스템에서 필수적인 기능입니다.

롤백 대상에 따라 애플리케이션 롤백(이전 버전 재배포), 데이터베이스 롤백(마이그레이션 취소), 인프라 롤백(설정 복원)으로 구분됩니다. 각각 복잡도와 리스크가 다르며, DB 롤백이 가장 까다롭습니다.

Kubernetes는 Deployment 히스토리를 유지하여 kubectl rollout undo로 즉시 롤백합니다. revisionHistoryLimit으로 보관할 ReplicaSet 수를 설정합니다. GitOps 환경에서는 Git revert로 이전 상태 커밋이 롤백을 트리거합니다.

실무에서는 롤백 시간 목표(RTO)를 5분 이내로 설정하고, 롤백 프로세스를 문서화합니다. 자동 롤백 조건(에러율 5% 초과, 응답 시간 2초 초과 등)을 설정하고 PagerDuty 알림을 연동합니다.

코드 예제

# Kubernetes 롤백
kubectl rollout history deployment/web-app          # 배포 히스토리 확인
kubectl rollout undo deployment/web-app             # 직전 버전으로 롤백
kubectl rollout undo deployment/web-app --to-revision=3  # 특정 버전으로 롤백
kubectl rollout status deployment/web-app           # 롤백 상태 확인

# Helm 롤백
helm history my-release                             # 릴리즈 히스토리
helm rollback my-release 2                          # revision 2로 롤백
helm rollback my-release 2 --wait --timeout 5m      # 타임아웃 설정

# ArgoCD 롤백 (GitOps)
argocd app rollback my-app 3                        # 특정 히스토리로 롤백
argocd app history my-app                           # 배포 히스토리 확인

# 자동 롤백 설정 (Argo Rollouts)
# analysis-template.yaml
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: success-rate
spec:
  metrics:
  - name: success-rate
    interval: 30s
    successCondition: result[0] >= 0.95   # 성공률 95% 이상
    failureLimit: 3                       # 3회 실패시 롤백
    provider:
      prometheus:
        address: http://prometheus:9090
        query: |
          sum(rate(http_requests_total{status=~"2.."}[5m])) /
          sum(rate(http_requests_total[5m]))

# DB 마이그레이션 롤백 (Flyway)
flyway undo                                         # 마지막 마이그레이션 취소
flyway undo -target=V003                            # 특정 버전까지 롤백

실무에서 이렇게 말해요

시니어: "배포 후 에러율 급증했어요. 바로 롤백하고 원인 분석합시다."

주니어: "helm rollback 실행했고 에러율 정상화됐습니다. 로그 보니 환경변수 누락이 원인이었네요."

면접관: "데이터베이스 스키마 변경 후 롤백이 필요하면 어떻게 하나요?"

지원자: "하위 호환 마이그레이션을 원칙으로 합니다. 컬럼 추가는 nullable로, 삭제는 2단계로 진행해서 롤백 시에도 이전 버전 앱이 동작하도록 합니다. 데이터 손실이 있는 변경은 백업 후 진행하고, 롤백 스크립트를 미리 준비합니다."

리뷰어: "revisionHistoryLimit이 2인데, 운영에서 충분할까요?"

개발자: "실제로 2단계 이전으로 롤백한 적은 없지만, 안전하게 10으로 늘리겠습니다."

주의사항

더 배우기