본문 바로가기
카테고리 없음

무중단 배포(Zero Downtime Deployment) 전략

by 백수A 2025. 4. 4. 18:22

무중단 배포(Zero Downtime Deployment) 전략

1. 문제 상황: 배포 중 서비스 중단

새로운 기능을 배포하거나 기존 시스템을 업데이트할 때, 다음과 같은 문제가 발생할 수 있다.

  • 배포 중에 서버가 재시작되면서 사용자 요청이 끊김
  • 트래픽이 많은 시간대에 배포하면 사용자가 오류를 경험
  • 배포 실패 시 롤백이 어려움
  • 데이터베이스 마이그레이션과 서비스 코드가 충돌하여 장애 발생

이러한 문제를 해결하기 위해 무중단 배포(Zero Downtime Deployment) 전략을 도입해야 한다.

2. 해결 과정: 무중단 배포 개념과 전략

2.1 무중단 배포란?

무중단 배포는 애플리케이션을 업데이트하는 동안에도 서비스가 중단되지 않도록 하는 배포 방식이다.

이를 구현하기 위해 다양한 기법이 활용된다.

  • Blue-Green Deployment
  • Canary Deployment
  • Rolling Update
  • Feature Toggle

3. 무중단 배포 전략

3.1 Blue-Green Deployment

Blue-Green 배포는 두 개의 환경(Blue와 Green)을 운영하여 배포 중에도 서비스 중단이 없도록 하는 방식이다.

  • 현재 운영 중인 환경을 Blue라고 가정
  • 새로운 버전을 Green 환경에 배포
  • Green 환경에서 테스트를 진행한 후 트래픽을 전환
  • 문제가 발생하면 즉시 Blue 환경으로 롤백

Blue-Green Deployment의 장점

  • 빠른 롤백이 가능
  • 배포 중에도 서비스가 중단되지 않음

Blue-Green Deployment의 단점

  • 두 개의 환경을 유지해야 하므로 비용이 증가
  • 데이터베이스 변경이 필요한 경우 복잡한 마이그레이션이 필요

3.2 Canary Deployment

Canary 배포는 새로운 버전을 일부 사용자에게만 먼저 배포한 후 점진적으로 전체 배포를 진행하는 방식이다.

Canary 배포 과정

  • 트래픽의 일부(예: 5%)만 새로운 버전으로 전송
  • 이상 징후가 없는지 모니터링
  • 문제가 없으면 점진적으로 트래픽 비율을 늘려 전체 배포

Canary 배포의 장점

  • 문제가 발생해도 빠르게 롤백 가능
  • 사용자 경험에 미치는 영향을 최소화

Canary 배포의 단점

  • 배포 및 모니터링 시스템이 필요
  • 트래픽 분배를 위한 로드 밸런서 또는 프록시 설정이 필요

3.3 Rolling Update

Rolling Update는 여러 개의 서버를 순차적으로 업데이트하여 서비스 중단 없이 배포하는 방식이다.

Rolling Update 과정

  • 전체 서버 중 일부(예: 10%)를 새 버전으로 업데이트
  • 업데이트된 서버가 정상적으로 동작하는지 확인
  • 문제가 없으면 나머지 서버도 점진적으로 업데이트

Rolling Update의 장점

  • 배포 중에도 지속적으로 서비스 제공 가능
  • 추가적인 인프라 비용이 발생하지 않음

Rolling Update의 단점

  • 배포 중에는 새로운 버전과 이전 버전이 공존하여 호환성이 필요
  • 전체 배포가 완료될 때까지 시간이 걸림

3.4 Feature Toggle

Feature Toggle은 코드 배포와 기능 활성화를 분리하여, 특정 기능을 활성화할지 여부를 설정할 수 있도록 하는 기법이다.

Feature Toggle 적용 방법

  • 기능을 코드에 포함하되 기본적으로 비활성화
  • 설정 파일, 데이터베이스, 환경 변수 등을 이용해 기능 활성화
  • 운영 중에도 즉시 기능을 켜거나 끌 수 있음

Feature Toggle의 장점

  • 배포 없이 기능을 활성화하거나 비활성화할 수 있음
  • A/B 테스트와 같은 실험을 쉽게 진행할 수 있음

Feature Toggle의 단점

  • 코드에 많은 조건문이 추가되므로 관리가 어려움
  • 오래된 토글이 유지될 경우 기술 부채로 작용할 수 있음

4. Kubernetes를 활용한 무중단 배포

Kubernetes(K8s)는 Rolling Update 및 Canary 배포를 지원하는 오케스트레이션 도구이다.

4.1 Kubernetes Rolling Update

kubectl set image deployment/my-app my-app=my-app:v2

이 명령어를 실행하면 Pod가 순차적으로 업데이트되며, 무중단 배포가 이루어진다.

4.2 Kubernetes Canary Deployment

kubectl apply -f canary-deployment.yaml

일부 트래픽만 새로운 버전으로 보내는 Canary 배포를 설정할 수 있다.

5. 무중단 배포를 위한 로드 밸런싱

로드 밸런서를 활용하여 무중단 배포를 지원할 수 있다.

  • Nginx: upstream 설정을 통해 트래픽 분배
  • AWS ALB(Application Load Balancer): 배포 중에도 지속적인 트래픽 라우팅
  • GCP Load Balancer: Canary 배포를 지원

6. 최종 정리

무중단 배포를 구현하면 배포 중에도 서비스가 중단되지 않고 안정적으로 운영될 수 있다.

핵심 요약

  • Blue-Green 배포: 두 개의 환경을 운영하여 빠른 롤백 가능
  • Canary 배포: 일부 사용자에게만 배포 후 점진적 확장
  • Rolling Update: 서버를 순차적으로 업데이트하여 다운타임 최소화
  • Feature Toggle: 기능을 코드 배포와 분리하여 운영 중 제어 가능
  • Kubernetes를 활용하면 자동화된 무중단 배포 가능

이러한 전략을 활용하면 서비스 안정성을 높이고, 배포로 인한 장애를 최소화할 수 있다.