3 분 소요

들어가며

애플리케이션을 클라우드 환경에 배포할 때 가장 중요한 목표 중 하나는 무중단 배포(Zero-downtime Deployment)입니다. 새로운 기능을 출시하거나 버그를 수정할 때 사용자가 서비스 중단을 경험하지 않도록 하는 것은 사용자 경험과 비즈니스 연속성에 직결됩니다.

Amazon ECS(Elastic Container Service)는 컨테이너 기반 애플리케이션을 위한 롤링 업데이트(Rolling Update)블루/그린 배포(Blue/Green Deployment)라는 두 가지 핵심 배포 전략을 제공합니다. 이 글에서는 각 전략의 작동 방식과 장단점을 비교하고, 상황에 맞는 적절한 선택 전략을 살펴보고자 합니다.

1. ECS 롤링 업데이트 (Rolling Update)

롤링 업데이트는 ECS의 기본 배포 방식입니다. 기존 서비스에 새로운 버전의 태스크(Task)를 점진적으로 추가하고, 이전 버전의 태스크를 점진적으로 제거하여 전체 서비스를 업데이트합니다1.

핵심 파라미터

롤링 업데이트의 동작은 서비스 구성의 두 가지 파라미터에 의해 결정됩니다:

  1. 최소 건전성 백분율 (Minimum Healthy Percent): 배포 중에 RUNNING 상태로 유지되어야 하는 태스크의 최소 비율입니다.
  2. 최대 백분율 (Maximum Percent): 배포 중에 서비스의 desiredCount를 초과하여 실행될 수 있는 태스크의 최대 비율입니다.

작동 방식 예시

desiredCount가 4인 서비스의 배포 시나리오는 다음과 같습니다:

설정 동작
Min 50% / Max 100% 기존 4개 중 2개를 먼저 중단하고, 새 버전 2개를 실행합니다. 가용성이 일시적으로 낮아질 수 있습니다.
Min 100% / Max 200% 새 버전 4개를 먼저 실행한 후(총 8개), 기존 버전 4개를 중단합니다. 추가 리소스가 필요하지만 가용성이 보장됩니다.

장점 및 단점

  • 단순성: 추가적인 인프라 설정(CodeDeploy 등) 없이 ECS 서비스 업데이트만으로 가능합니다.
  • 비용 효율성: Min 50% / Max 100% 설정을 사용하면 추가 리소스 없이도 배포가 가능합니다.
  • 롤백 속도: 문제가 발생하면 이전 태스크 정의로 다시 롤링 업데이트를 수행해야 하므로 롤백이 느립니다.
  • 버전 혼용: 배포 진행 중에는 신규 버전과 이전 버전의 트래픽이 섞여서 들어옵니다.

2. ECS 블루/그린 배포 (Blue/Green)

블루/그린 배포는 별도의 환경(그린)에 새 버전을 완전히 구성한 후, 로드 밸런서의 리스너를 통해 트래픽을 한꺼번에 전환하는 방식입니다. ECS에서는 AWS CodeDeploy와 통합하여 이 기능을 활용할 수 있습니다2.

구성 요소

  • 블루(Blue): 현재 운영 중인 원본 서비스 환경
  • 그린(Green): 새로운 버전이 배포된 대상 서비스 환경
  • ALB 리스너: 트래픽을 블루 또는 그린 대상 그룹으로 전달하는 역할 (주로 80/443 포트)
  • 테스트 리스너: 그린 환경이 정상인지 사전에 확인하기 위한 별도 포트 (예: 8080)

작동 방식

  1. CodeDeploy가 그린 환경에 새 태스크를 프로비저닝합니다.
  2. 테스트 리스너를 통해 그린 환경의 동작을 검증합니다.
  3. 검증 완료 후, ALB 리스너의 대상 그룹을 블루에서 그린으로 전환합니다.
  4. 지정된 대기 시간이 지나면 이전 버전(블루)의 리소스를 삭제합니다.

장점 및 단점

  • 빠르고 안전한 롤백: 문제가 발견되면 즉시 리스너를 다시 블루로 돌리기만 하면 됩니다.
  • 완전한 격리: 테스트 리스너를 통해 실 서비스 트래픽 전환 전에 실제 환경에서 테스트가 가능합니다.
  • 복잡성: CodeDeploy 설정, IAM 역할, 추가 대상 그룹 등 설정이 복잡합니다.
  • 리소스 소모: 배포 시점에 일시적으로 두 배의 리소스(태스크 수)가 필요합니다.

롤링 업데이트 vs 블루/그린 비교표

항목 롤링 업데이트 블루/그린 (CodeDeploy)
난이도 낮음 (기본값) 높음 (추가 설정 필요)
인프라 비용 효율적 (설정에 따라 0) 일시적으로 2배 필요
롤백 시간 느림 (재배포 필요) 매우 빠름 (즉시 전환)
테스트 검증 불가능 (배포와 동시에 노출) 가능 (테스트 리스너 활용)
적합한 환경 개발/테스트, 단순 웹 서비스 프로덕션, 미션 크리티컬 서비스

실전 선택 가이드

롤링 업데이트를 선택해야 할 때

  • 배포 속도보다 인프라 비용 절감이 중요할 때
  • 애플리케이션이 Stateless하며, 두 버전이 잠시 혼용되어도 문제가 없을 때
  • 소규모 팀에서 운영 복잡도를 낮추고 싶을 때

블루/그린 배포를 선택해야 할 때

  • 배포 실패 시 즉각적인 롤백이 반드시 필요할 때
  • 사용자에게 노출되기 전 실제 운영 환경에서의 최종 검증이 필수적일 때
  • 데이터베이스 스키마 변경 등 버전 혼용 시 치명적인 문제가 발생할 수 있을 때

마무리

ECS에서의 배포 전략 선택은 ‘비용과 단순성’ 그리고 ‘안정성과 가용성’ 사이의 트레이드오프입니다.

  1. 롤링 업데이트는 설정이 간편하고 비용 효율적이지만 롤백이 상대적으로 느립니다.
  2. 블루/그린 배포는 설정이 복잡하고 리소스가 더 필요하지만, 가장 높은 수준의 배포 안정성을 제공합니다.

서비스의 중요도와 인프라 관리 역량에 맞춰 적절한 전략을 선택하는 것이 중요합니다. 처음 시작한다면 롤링 업데이트로 시작하여, 서비스가 성장하고 안정성이 중요해짐에 따라 블루/그린 배포로 전환하는 것이 권장된다고 볼 수 있습니다.


참고 자료:

  1. AWS 공식 문서: Amazon ECS 배포 유형 - 롤링 업데이트 및 블루/그린 상세 설명 

  2. AWS 공식 문서: CodeDeploy를 사용한 ECS 블루/그린 배포 - CodeDeploy 통합 가이드 

카테고리:

업데이트:

댓글남기기