배포 환경을 개선하면서 무중단 배포의 대표적인 세 가지 방식(블루-그린, 롤링, 카나리)을 비교하고, AWS에서 각각 어떤 서비스로 구현하는지 조사했다.

무중단 배포란?

무중단 배포는 서비스 장애와 배포의 부담을 최소화하기 위해 운영 중인 서비스를 중단하지 않고 신규 소프트웨어를 배포하는 기술

블루-그린 배포(Blue-Green Deployment)

  • 개념: 두 개의 환경(블루와 그린)을 유지하며, 현재 운영 중인 서비스 환경을 Blue, 새롭게 배포할 환경을 Green이라고 함
  • 배포 과정
    • 새로운 버전을 그린 환경에 배포한 후, 충분한 테스트를 거침
    • 테스트 완료 후 트래픽을 블루 환경에서 그린 환경으로 전환
    • 문제가 발생하면 다시 블루 환경으로 트래픽을 전환하여 롤백 용이
  • 장점
    • 롤백이 간단하고 위험이 적음
    • 테스트가 충분히 이루어진 후에 실제 서비스에 반영
    • 호환성 문제 없음
  • 단점
    • 두 개의 환경을 유지해야 하므로 인프라 비용 증가

롤링 배포(Rolling Deployment)

  • 개념: 전체 서버 중 일부씩 점진적으로 새로운 버전을 배포
  • 배포 과정
    • 전체 서버를 여러 그룹으로 나누고, 한 그룹씩 순차적으로 새로운 버전을 배포
    • 한 그룹에 배포가 완료되면 다음 그룹에 배포
    • 배포 중 문제가 발생하면 이전 그룹으로 롤백
  • 장점:
    • 서버 인스턴스를 점진적으로 교체하므로 트래픽이 지속적으로 분산
    • 많은 서버 자원을 확보하지 않아도 가능
  • 단점
    • 배포 과정이 길어질 수 있음
    • 복잡한 롤백 절차
    • 호환성 문제 (API 변경, 데이터베이스 스키마 변경 등)

카나리 배포(Canary Deployment)

  • 개념: 새로운 버전을 소수의 사용자에게 먼저 배포하여 문제 여부를 파악한 후, 점진적으로 배포 범위를 확대
  • 절차
    • 초기에 전체 사용자 중 일부에게만 새로운 버전 배포
    • 문제가 없으면 점차적으로 배포 대상을 늘려가며 최종적으로 모든 사용자에게 배포
    • 문제가 발견되면 신속히 이전 버전으로 롤백 가능
  • 장점
    • 문제 발생 시 영향을 받는 사용자가 적음
    • 새로운 버전으로 인한 위험 최소화
    • 배포의 안정성 높음
  • 단점
    • 배포와 롤백 복잡
    • 트래픽 관리 필요
    • 호환성 문제 (API 변경, 데이터베이스 스키마 변경 등)

무중단 배포 방식 비교

요소 롤링 배포 (Rolling Deployment) 카나리 배포 (Canary Deployment) 블루-그린 배포
(Blue-Green Deployment)
트래픽과 부하 트래픽과 부하가 분산되며, 점진적 업데이트로 트래픽 중단 최소화 소규모 트래픽을 새로운 버전으로 라우팅하여 초기 위험을 최소화 전환 시점에 트래픽이 한 번에 이동, 충분한 인프라 필요
배포 시간과 비용 몇 시간에서 며칠 소요, 시간 증가로 인해 비용 증가 가능 몇 시간에서 며칠 소요, 초기 단계의 추가 모니터링 비용 발생 몇 분에서 몇 시간 소요, 두 환경 유지로 인해 비용 증가
기술적 구현 가능성 Auto Scaling, Load Balancer 설정 필요 트래픽 분할 및 모니터링 설정 필요 두 환경 운영 및 Route 53 같은 트래픽 전환 도구 필요

적합한 배포 방식 분석 및 AWS 서비스 조사

- 블루 그린 배포 (Blue-Green Deployment)

  • 적합한 상황
    • 다운타임 없이 안정적으로 새 버전을 배포하고 싶을 때 적합
    • 대규모 서비스나 중요한 웹 애플리케이션에 적합
  • AWS 관련 서비스:
    • Route 53 (DNS 라우팅), Elastic Load Balancing, AWS CloudFormation 또는 AWS CodeDeploy 등
      • 두 환경 간의 동기화와 전환 시점 관리가 필요

- 롤링 배포 (Rolling Deployment)

  • 적합한 상황
    • 서버 인스턴스를 점진적으로 업데이트 가능
    • 단일 요청에 대한 응답 시간이 상대적으로 짧은 서비스에 적합
  • AWS 관련 서비스:
    • Auto Scaling, Elastic Load Balancing (Application Load Balancer 등)
      • 각 인스턴스의 업데이트를 자동으로 관리하는 설정이 필요
      • ECS에서 롤링 업데이트 기능 제공

- 카나리 배포 (Canary Deployment)

  • 적합한 상황
    • 새로운 기능이나 변경 사항의 성능을 안정적으로 평가하고자 할 때 적합
    • 특정 지역 또는 사용자 그룹에 대해 실험적으로 배포할 때 유용
  • AWS 관련 서비스:
    • AWS CodeDeploy, AWS Lambda, CloudWatch 등
      • 트래픽을 분할하고 모니터링

참고 자료