Docker Compose Rollback 자동화 완벽 가이드! 배포 실패 시 빠른 복구 전략 구축하기

Production 서버에서 새로운 Version을 배포할 때 가장 중요한 것은 문제가 발생했을 때 빠르게 이전 상태로 복구하는 것입니다.

아무리 테스트를 진행해도 실제 운영 환경에서는 예상하지 못한 문제가 발생할 수 있습니다.

예:

새 Version 배포

↓

Application 오류 발생

↓

사용자 영향 발생

Rollback 시스템이 없다면 복구 시간이 길어지고 서비스 장애 시간이 증가합니다.

Rollback은 문제가 발생했을 때 이전에 정상적으로 동작하던 Version으로 돌아가는 과정입니다.

기본 구조:

New Version

↓

문제 발생

↓

Rollback 실행

↓

Previous Version 복구

이번 글에서는 Docker Compose Rollback 개념부터 Image Version 관리, 자동 복구 Script, CI/CD Rollback Pipeline, Production 운영 전략까지 알아보겠습니다.

Docker Compose Rollback이란?

Rollback은 배포한 Version을 이전 안정 Version으로 되돌리는 작업입니다.

예:

정상 운영:

app:1.0

새 배포:

app:2.0

문제 발생:

app:2.0 오류

Rollback:

app:1.0 복구

Rollback이 필요한 이유

Production 환경에서는 다양한 문제가 발생할 수 있습니다.

대표적인 장애:

  • Application 오류
  • 환경 변수 문제
  • Database Migration 오류
  • Memory 증가
  • 성능 저하
  • Dependency 충돌

배포 실패 시:

빠른 복구

↓

서비스 정상화

↓

사용자 영향 최소화

Docker Compose Image Version 관리

Rollback의 핵심은 Image Version 관리입니다.

좋지 않은 방식:

image: my-app:latest

문제:

현재 Version 확인 어려움

권장:

image: my-app:1.2.0

Version 구조:

my-app:1.0.0

my-app:1.1.0

my-app:1.2.0

이전 Version을 항상 유지해야 합니다.

Docker Compose 수동 Rollback 방법

현재:

app:2.0

변경:

docker-compose.yml

image: my-app:1.9

재배포:

docker compose up -d

결과:

새 Version 제거

↓

이전 Version 실행

Docker Compose Rollback Script 작성

자동 복구 Script를 만들 수 있습니다.

rollback.sh:

#!/bin/bash

echo "Rollback Start"

docker compose down

docker compose up -d

실행:

chmod +x rollback.sh

활용:

장애 발생

↓

Script 실행

↓

복구

Docker Compose Healthcheck 기반 Rollback

Healthcheck를 이용하면 자동 판단이 가능합니다.

구조:

Deploy

↓

Healthcheck

↓

실패

↓

Rollback

예:

Container unhealthy

↓

이전 Image 실행

Docker Compose CI/CD Rollback 구조

자동화 Pipeline:

Git Push

↓

Build

↓

Deploy New Version

↓

Health Check

↓

성공

↓

완료


실패

↓

Rollback

구조:

New Version

↓

검증

↓

문제 발생

↓

Previous Version

Docker Compose GitHub Actions Rollback

Workflow에서 실패 처리를 추가할 수 있습니다.

예:

- name: Deploy

  run: docker compose up -d


- name: Rollback

  if: failure()

  run: ./rollback.sh

동작:

Deploy 실패

↓

Rollback Script 실행

Docker Compose Database Rollback 주의사항

Application Rollback보다 Database Rollback이 어렵습니다.

예:

Version 2.0:

새로운 Column 추가

Rollback:

Version 1.0 실행

문제:

기존 Application이 새로운 Schema를 이해하지 못함

해결:

Backward Compatible Migration 사용

순서:

Column 추가

↓

Application 업데이트

↓

기존 Column 제거

Docker Compose Backup과 Rollback

Rollback 전 Backup은 필수입니다.

구조:

Backup 생성

↓

Deploy

↓

문제 발생

↓

Rollback

Database:

mysqldump backup.sql

복원:

mysql < backup.sql

Docker Compose Blue Green Rollback

Blue Green 방식에서는 Rollback이 간단합니다.

현재:

Green 운영

문제 발생:

Traffic 이동

복구:

Traffic

↓

Blue

Container 삭제 없이 빠르게 복구 가능합니다.

Docker Compose Canary Rollback

Canary 방식:

문제 발생:

Canary 10%

복구:

Canary Traffic 제거

결과:

기존 Version 100%

Docker Compose Rollback Monitoring

자동 Rollback 판단 기준:

Error Rate:

오류 증가

Response Time:

응답 지연

Health:

unhealthy

Resource:

CPU / Memory 이상

Docker Compose Production Rollback 전략

권장 구조:

Image Version 저장

↓

Deploy

↓

Health Check

↓

Monitoring

↓

문제 발생

↓

자동 Rollback

필수 구성:

  • Version Tag
  • Backup
  • Healthcheck
  • Monitoring
  • Rollback Script

Docker Compose Rollback Best Practice

운영 추천:

  • latest Tag 사용 금지
  • 이전 Image 보관
  • Database Migration 테스트
  • 자동 Health Check
  • Rollback Script 준비
  • CI/CD 실패 처리

배포 흐름:

Build

↓

Test

↓

Deploy

↓

Monitor

↓

Success

↓

완료


Failure

↓

Rollback

자주 묻는 질문

Rollback하면 데이터도 자동 복구되나요?

아닙니다.

Database 변경은 별도 Backup과 Migration 전략이 필요합니다.

이전 Docker Image를 삭제하면 안 되나요?

Rollback을 위해 일정 기간 유지하는 것이 좋습니다.

자동 Rollback이 가능한가요?

가능합니다.

Healthcheck와 CI/CD Pipeline을 연결하면 구현할 수 있습니다.

Rollback과 Backup 차이는 무엇인가요?

Rollback은 Version 복구이고 Backup은 데이터 복구입니다.

마무리

Docker Compose Rollback 자동화는 Production 서버 안정성을 유지하기 위한 핵심 기능입니다.

최종 구조:

새 Version 배포

↓

Health Check

↓

Monitoring

↓

문제 감지

↓

Previous Version 복구

안정적인 서버 운영에서는 새로운 기능을 빠르게 배포하는 것보다 문제가 발생했을 때 얼마나 빠르게 복구할 수 있는지가 중요합니다.

다음 글에서는 여러 Container를 운영하면서 성능과 트래픽을 처리하기 위한 Docker Compose Scaling 구성 방법을 알아보겠습니다.

댓글 남기기