무중단 배포란?
- 무중단 배포(Zero-Downtime Deployment)는 애플리케이션을 배포할 때 서비스 중단 없이 새로운 버전을 배포하는 방식입니다.
- 사용자에게는 지속적인 서비스를 제공하면서, 새로운 버전의 안정성을 점진적으로 확인할 수 있는 방법입니다.
무중단 배포 주요 전략 3가지
1. 블루-그린 배포 (Blue-Green Deployment)
과정
- 두 개의 동등한 환경(블루/그린)을 환경을 이용합니다. 블루는 현재 운영 중인 프로덕션 환경이고, 그린은 새로운 버전을 배포할 환경입니다.
- 블루 환경이 실행되고 있는 상황에서, 그린 환경에 새로운 버전의 애플리케이션을 배포합니다.
- 배포가 완료되고 나면, 로드 밸런서나 웹서버를 통해 트래픽을 블루 환경에서 그린 환경으로 전환합니다.
- 이후 블루 환경은 필요에 따라 유지하거나 종료합니다.
장점
- 그린 환경에서 문제가 발생할 경우 다시 블루 환경으로 롤백할 수 있습니다.
- 프로덕션 환경과 유사한 환경에서 새로운 버전을 테스트할 수 있습니다.
단점
- 두 개의 환경을 유지해야 하므로 인프라와 리소스가 2배로 필요합니다.
- 자동화된 테스트에서 오류가 감지되지 않을 경우, 그린 환경으로 가는 트래픽이 모두 영향을 받을 수 있습니다.
블루-그린 배포를 지원하는 서비스
- AWS Elastic Beanstalk, AWS Elastic Load Balancing(ELB), AWS CodeDeploy
- GCP Google Kubernetes Engine(GKE), Google Cloud Run
2. 카나리 배포 (Canary Deployment)
과정
- 기존 버전(stable)과 새 버전(canary)을 동시에 실행합니다.
- 사용자를 두 그룹으로 나누어 소규모의 사용자는 카나리 버전으로, 나머지는 기존 버전으로 트래픽을 분리합니다.
- 문제가 발생하면 이전 버전으로 롤백하거나 수정합니다.
- 카나리 버전이 안정성이 확인되면 전체 트래픽을 새 버전으로 전환합니다.
장점
- 기존 버전으로의 롤백이 빠릅니다.
- 문제 발생시 소규모의 사용자만 영향을 받습니다.
- 실제 사용자를 대상으로 새 버전을 테스트할 수 있습니다.
- * A/B 테스트 환경으로 사용될 수 있습니다.
(* 두 가지 이상의 버전의 애플리케이션을 비교하여 어떤 버전이 더 나은 성과를 내는지 판단하는 것)
단점
- 두 버전을 실행해야 하므로 서버 리소스와 비용이 추가로 들 수 있습니다.
- 두 버전이 함께 실행되기 때문에 호환성 문제가 발생할 수 있습니다.
카나리 배포를 지원하는 서비스
- AWS CodeDeploy, AWS Elastic Container Service(ECS)
- GCP Google Kubernetes Engine(GKE), Google Cloud Run
3. 롤링 배포 (Rolling Deployment)
과정
- 기존 버전의 일부 인스턴스를 새 버전으로 교체합니다.
- 교체한 일부 인스턴스에서 안정적으로 동작하면 점진적으로 나머지 인스턴스에 새 버전을 배포합니다.
- 전체 인스턴스가 새 버전으로 업데이트되면, 구 버전의 인스턴스는 종료되거나 리소스 풀에서 제거됩니다.
장점
- 블루-그린 배포와 비교했을 때, 전체 인프라를 동일하게 구성하는 대신 새로운 인스턴스만 하나씩 추가하면 됩니다.
- 롤백이 필요한 경우 모든 트래픽을 이전 버전으로 되돌릴 수 있습니다.
단점
- 전체 시스템이 새 버전으로 업데이트 되기까지 시간이 걸릴 수 있습니다.
- 블루-그린, 카나리 배포에 비해 롤백하는데 시간이 오래 걸릴 수 있습니다.
- 카나리 배포와 마찬가지로 기존 버전과 새 버전이 동시에 실행될 때 호환성 문제가 발생할 수 있습니다.
롤링 배포를 지원하는 서비스
- AWS Elastic Beanstalk, AWS Elastic Container Service(ECS)
- GCP Google Kubernetes Engine(GKE), Google Cloud Run
블루-그린 배포 vs 카나리 배포 vs 롤링 배포 비교 정리
블루-그린 배포 | 카나리 배포 | 롤링 배포 | |
설명 | 블루/그린 두 개의 환경을 구성, 그린 환경에 새 버전 배포 후 트래픽 전환 | 일부 사용자 트래픽만 새 버전으로 배포하여 테스트하고, 문제 없으면 전체 트래픽을 새 버전으로 전환 | 기존 버전의 일부 인스턴스만 새 버전으로 업데이트하여 테스트하고, 문제 없으면 나머지 인스턴스도 새 버전으로 점진적 업데이트 |
장점 |
|
|
|
단점 |
|
|
|
참고
What Is Blue-Green Deployment?
Blue-Green, Rolling, and Canary: Continuous Deployments Explained