서비스가 성장하면 단순히 Container를 실행하는 것만으로는 안정적인 운영이 어렵습니다.
새로운 기능을 배포하거나 서버를 업데이트할 때 가장 중요한 목표는 서비스 중단 시간을 최소화하는 것입니다.
기존 배포 방식:
기존 Container 종료
↓
새 Version 배포
↓
서비스 재시작
문제:
- 배포 시간 동안 접속 불가
- 사용자 경험 저하
- 장애 발생 가능성 증가
무중단 배포 방식:
기존 서비스 유지
↓
새 Version 실행
↓
검증
↓
Traffic 전환
서비스를 유지하면서 새로운 Version을 적용할 수 있습니다.
이번 글에서는 Docker Compose 환경에서 사용할 수 있는 무중단 배포 방식과 Blue Green, Canary, Rolling Update 구조, Rollback 전략, Production 운영 방법까지 알아보겠습니다.
Docker Compose 무중단 배포란?
무중단 배포는 서비스를 종료하지 않고 새로운 Version을 적용하는 배포 방식입니다.
목표:
서비스 유지
↓
Version 업데이트
↓
장애 최소화
일반적인 구조:
사용자
↓
Load Balancer
↓
Application Container
↓
Database
배포 중에도 기존 Container가 사용자 요청을 처리합니다.
Docker Compose 일반 배포와 차이
일반 배포:
Container Stop
↓
Image Update
↓
Container Start
문제:
Downtime 발생
무중단 배포:
Old Version 실행
↓
New Version 실행
↓
Traffic 이동
장점:
- 서비스 중단 없음
- 안정적인 업데이트
- 빠른 복구
Docker Compose 무중단 배포 방식 종류
대표적인 방식:
Blue Green 배포
두 개 환경 유지
구조:
Blue
↓
현재 운영
Green
↓
새 Version
Traffic을 한 번에 변경합니다.
Canary 배포
일부 사용자부터 적용
구조:
90%
↓
기존 Version
10%
↓
새 Version
점진적으로 확대합니다.
Rolling Update
Container를 순차적으로 교체합니다.
구조:
Container 1 교체
↓
Container 2 교체
↓
완료
Docker Compose Rolling Update 개념
Rolling Update는 여러 Container를 조금씩 교체하는 방식입니다.
기존:
App 1
App 2
App 3
업데이트:
App 1
↓
New App
App 2
↓
New App
App 3
↓
New App
장점:
- 서비스 유지
- Resource 효율적
Docker Compose에서 Rolling Update 구현
Docker Compose 자체는 Swarm처럼 완전한 Rolling Update 기능을 제공하지 않습니다.
하지만 다음 구조로 구현할 수 있습니다.
구성:
Docker Compose
↓
Multiple Container
↓
Nginx Load Balancer
과정:
새 Container 생성
↓
Health 확인
↓
기존 Container 제거
Docker Compose Nginx Load Balancer 구조
무중단 배포에서는 Traffic 제어가 핵심입니다.
구조:
사용자
↓
Nginx
↓
App Container 1
App Container 2
App Container 3
Nginx가 정상 Container로 요청을 전달합니다.
Docker Compose Healthcheck 필수 구성
무중단 배포에서는 새 Version이 정상인지 확인해야 합니다.
구조:
New Container 실행
↓
Healthcheck
↓
정상 확인
↓
Traffic 연결
예:
healthcheck:
test:
- CMD
- curl
- localhost:3000
interval: 10s
retries: 5
Docker Compose 배포 자동화 흐름
Production Pipeline:
Git Push
↓
CI Test
↓
Docker Build
↓
New Container 실행
↓
Healthcheck
↓
Traffic 전환
↓
Old Container 제거
자동화하면 사람이 직접 서버를 조작할 필요가 줄어듭니다.
Docker Compose Rollback 전략
무중단 배포에서도 문제가 발생할 수 있습니다.
예:
New Version 배포
↓
Error 증가
↓
서비스 영향
Rollback:
Traffic
↓
이전 Version 이동
필요 요소:
- Image Version 관리
- 이전 Container 유지
- Backup
- Monitoring
Docker Compose Image Version 관리
Rollback을 위해 Image Tag를 관리해야 합니다.
좋은 방식:
app:1.0
app:1.1
app:1.2
나쁜 방식:
app:latest
이유:
어떤 Version인지 확인하기 어렵습니다.
Docker Compose Database 무중단 운영
Application 배포보다 Database 변경이 어렵습니다.
문제:
Application v2
↓
Database Schema 변경 필요
해결:
단계적 Migration
예:
1단계:
새 Column 추가
2단계:
Application 변경
3단계:
기존 Column 제거
이 방식을 Backward Compatible Migration이라고 합니다.
Docker Compose 무중단 배포 Monitoring
배포 중 확인:
Application:
- Error Rate
- Response Time
Container:
- CPU
- Memory
Database:
- Connection
- Query
Network:
- Traffic
구조:
Deploy
↓
Monitoring
↓
판단
↓
확대 또는 Rollback
Docker Compose Production 무중단 구조
실제 운영:
사용자
↓
Load Balancer
↓
Nginx
↓
Application Cluster
↓
Redis Cache
↓
Database
↓
Monitoring
↓
Alert
Docker Compose 무중단 배포 Best Practice
추천:
- Healthcheck 적용
- Image Version 관리
- Monitoring 구성
- Rollback 준비
- Database Migration 관리
- CI/CD 자동화
배포 순서:
Backup
↓
Build
↓
Deploy New Version
↓
Health Check
↓
Traffic 전환
↓
Monitoring
↓
완료
자주 묻는 질문
Docker Compose로 완전한 무중단 배포가 가능한가요?
가능합니다.
Nginx, Healthcheck, 여러 Container 구조를 조합하면 구현할 수 있습니다.
Blue Green과 Rolling Update 중 어떤 것이 좋은가요?
Blue Green은 안정성과 Rollback이 쉽고, Rolling Update는 Resource 효율이 좋습니다.
작은 서버에서도 필요한가요?
서비스 중요도가 높다면 작은 규모에서도 적용할 가치가 있습니다.
가장 중요한 요소는 무엇인가요?
Healthcheck, Monitoring, Rollback 준비가 핵심입니다.
마무리
Docker Compose 무중단 배포는 안정적인 Production 서버 운영을 위한 핵심 기술입니다.
최종 구조:
새 Version 준비
↓
Container 실행
↓
Health Check
↓
Traffic 이동
↓
Monitoring
↓
서비스 유지
이 구조를 적용하면 서비스 중단 없이 새로운 기능을 배포하고 장애 발생 시 빠르게 복구할 수 있습니다.
다음 글에서는 배포 실패 시 이전 Version으로 빠르게 돌아가는 Docker Compose Rollback 자동화 방법을 알아보겠습니다.