🎯 목표
현재 단순 재시작 방식의 배포를 Blue-Green 방식으로 전환하여 무중단 배포(Zero Downtime Deployment)를 구현한다.
📌 배경
현재 배포 방식은 기존 컨테이너를 중단 후 새 컨테이너를 실행하는 구조로, 배포 시 서비스 다운타임이 발생한다.
# 현재 방식 — 다운타임 발생
docker rm -f $(docker ps -qa)
docker pull ...
docker-compose up -d
Blue-Green 배포를 적용하면 새 버전을 먼저 띄우고 헬스체크 통과 후 트래픽을 전환하므로 다운타임 없이 배포가 가능하다.
🔧 구현 내용
인프라 구성
- EC2 단일 서버에서 NGINX + Docker Compose로 구현
- Blue 컨테이너 (8080), Green 컨테이너 (8081) 두 개 운영
- NGINX가 현재 active 컨테이너로 트래픽 라우팅
NGINX (80/443)
↓
Blue (8080) 또는 Green (8081) ← 트래픽 전환
배포 흐름
1. 새 Docker 이미지 빌드 & DockerHub push
2. 현재 inactive 컨테이너(Blue or Green)에 새 이미지 실행
3. /actuator/health 헬스체크 통과 확인
4. NGINX 설정 변경 → 트래픽 전환 (nginx -s reload)
5. 기존 컨테이너 종료
6. 배포 실패 시 → 기존 컨테이너 유지 (자동 롤백)
✅ 체크리스트
인프라
애플리케이션
배포 스크립트
GitHub Actions
📎 참고 사항
- Self-hosted Runner 방식과 함께 적용하면 SSH 키 없이 EC2에서 직접
deploy.sh 실행 가능
- 단일 EC2 환경이므로 Blue/Green 전환 시 메모리 여유 확인 필요 (컨테이너 2개 동시 실행)
- 롤백은 NGINX upstream을 이전 포트로 되돌리고
nginx -s reload 하면 즉시 가능
🎯 목표
현재 단순 재시작 방식의 배포를 Blue-Green 방식으로 전환하여 무중단 배포(Zero Downtime Deployment)를 구현한다.
📌 배경
현재 배포 방식은 기존 컨테이너를 중단 후 새 컨테이너를 실행하는 구조로, 배포 시 서비스 다운타임이 발생한다.
Blue-Green 배포를 적용하면 새 버전을 먼저 띄우고 헬스체크 통과 후 트래픽을 전환하므로 다운타임 없이 배포가 가능하다.
🔧 구현 내용
인프라 구성
배포 흐름
✅ 체크리스트
인프라
애플리케이션
spring-boot-starter-actuator의존성 추가/actuator/health엔드포인트 활성화 확인배포 스크립트
deploy.sh작성 (active 컨테이너 감지 → 전환 → 헬스체크 → NGINX reload)GitHub Actions
deploy.sh실행 스텝 연결📎 참고 사항
deploy.sh실행 가능nginx -s reload하면 즉시 가능