ECR·Blue/Green·Canary 배포 전략 (DOP-C02)

DOP-C02 대비 ECR 이미지 태그·다이제스트, CodeArtifact, Blue/Green, Canary 등 아티팩트 관리부터 배포 전략까지 상황별 선택 기준을 정리합니다.

DOP-C02 시험에서 배포 전략은 가장 많이 출제되는 세부 주제 중 하나입니다. 단순히 전략의 이름을 아는 것을 넘어, 특정 비즈니스 요구사항(다운타임 허용 여부, 롤백 속도, 용량 유지, 비용)에 따라 어떤 전략이 최적인지 판별하는 능력을 갖춰야 합니다. 아티팩트 관리에서 배포 실행까지 전체 흐름을 이해해야 합니다.

 

아티팩트 관리 서비스

Amazon ECR - 컨테이너 이미지 레지스트리

ECR은 Docker 이미지를 저장하는 완전관리형 컨테이너 레지스트리입니다. 시험에서 중요한 ECR 관련 포인트:

이미지 태그 vs 이미지 다이제스트: latest 태그는 가변적이어서 ECR에 새 이미지가 푸시되어도 이미 캐시된 이전 이미지가 사용될 수 있습니다. 이미지 다이제스트(sha256 해시)는 불변 식별자로 특정 이미지를 정확하게 고정할 수 있습니다. ECS 태스크 정의에서 이미지를 {repo}@sha256:{hash} 형식으로 지정하면 항상 동일한 이미지가 사용됩니다.

ECR 이미지 스캐닝: 기본 스캐닝(푸시 시 자동 취약점 검사)과 고급 스캐닝(Inspector v2 연동, 지속적 모니터링)을 지원합니다. 취약점 발견 시 EventBridge를 통해 자동 알림을 설정할 수 있습니다.

교차 계정 ECR 접근: 리포지토리 정책으로 다른 AWS 계정의 EC2 인스턴스나 ECS 태스크가 이미지를 Pull할 수 있도록 설정합니다.

AWS CodeArtifact - 패키지 저장소

CodeArtifact는 npm, pip, Maven, Gradle 등의 패키지를 사설 저장소로 관리합니다. 외부 퍼블릭 저장소(PyPI, npm registry 등)에 대한 업스트림 연결을 설정하면 패키지를 자동으로 캐시하여 인터넷 의존성을 줄이고 보안을 강화합니다.

EC2 Image Builder

EC2 Image Builder는 AMI 빌드 자동화 서비스입니다. 이미지 레시피에 베이스 AMI, 설치할 소프트웨어 컴포넌트, 검증 테스트를 정의하면 스케줄 기반으로 자동으로 새 AMI를 빌드합니다. Elastic Beanstalk나 ASG의 Launch Template과 연동하여 항상 최신 상태의 AMI를 사용할 수 있습니다.

시험 시나리오: "인스턴스 부팅 후 대용량 라이브러리 설치에 15분이 소요되어 Auto Scaling 스케일아웃이 느립니다." 해결책은 EC2 Image Builder로 필요한 라이브러리가 사전 설치된 Golden AMI를 생성하는 것입니다. .ebextensions의 런타임 설치와는 명확히 구분됩니다.

 

배포 전략 완전 비교

EC2 기반 배포 전략

CodeDeploy In-place 배포: AllAtOnce: 모든 인스턴스 동시 배포, 가장 빠름, 배포 중 다운타임 발생 OneAtATime: 한 번에 하나씩 순차 배포, 가장 느림, 가용성 최대 보장, 추가 비용 없음 HalfAtATime: 절반씩 배포, 중간 수준의 속도와 가용성

CodeDeploy Blue/Green 배포: 새로운 Auto Scaling 그룹(Green)을 프로비저닝하고 ALB 타겟 그룹을 전환합니다. 배포 중 전체 용량이 유지되며 즉각적인 롤백이 가능합니다. 단, 일시적으로 인프라 비용이 두 배가 됩니다.

ALB 가중치 기반 타겟 그룹: 두 개의 ASG를 각각 타겟 그룹으로 등록하고 ALB 리스너에서 가중치를 조정하여 카나리 배포를 구현합니다. 신버전 타겟 그룹 가중치를 5%에서 시작해 점진적으로 증가시키고, 문제 발생 시 가중치를 0으로 설정하면 즉시 롤백됩니다. Route 53 가중치 라우팅과 달리 DNS TTL 지연 없이 실시간 비율 제어가 가능합니다.

ASG Instance Refresh: Launch Template의 AMI를 업데이트한 후 Instance Refresh를 시작하면 ASG가 MinHealthyPercentage(기본 90%)를 유지하면서 자동으로 구형 인스턴스를 신형으로 교체합니다. 별도 에이전트나 복잡한 배포 그룹 설정 없이 단일 API 호출로 실행 가능하여 운영 오버헤드가 낮습니다.

 

Elastic Beanstalk 배포 전략 심화

Elastic Beanstalk는 5가지 배포 정책을 제공합니다. 시험에서 각 정책의 특성을 정확히 구분할 수 있어야 합니다.

| 배포 정책 | 다운타임 | 롤백 방법 | 비용 | 특징 | |---------|---------|---------|------|------| | All at once | 발생 | 재배포 필요 | 없음 | 가장 빠름 | | Rolling | 없음 (일부 용량 감소) | 재배포 필요 | 없음 | 배포 중 버전 혼재 | | Rolling with additional batch | 없음 (전체 용량 유지) | 재배포 필요 | 소규모 추가 | 비용 효율적 용량 유지 | | Immutable | 없음 | 즉각 (새 ASG 종료) | 일시적 두 배 | 단일 환경 내 안전한 롤백 | | Traffic splitting | 없음 | 비율 재조정 | 일시적 추가 | 카나리 A/B 테스트 |

Immutable 배포의 핵심 특성

Immutable은 기존 ASG와 완전히 분리된 새로운 임시 ASG에 새 인스턴스를 배포합니다. 헬스 체크 통과 후 기존 ASG로 인스턴스가 이동하고 임시 ASG가 삭제됩니다. 실패 시 임시 ASG만 삭제하면 되므로 기존 인스턴스는 전혀 영향을 받지 않습니다. Blue/Green(별도 Beanstalk 환경 + CNAME 교체)과 달리 단일 환경 내에서 처리됩니다.

Blue/Green CNAME Swap vs Immutable

두 전략 모두 무중단 배포와 빠른 롤백을 제공하지만 사용 맥락이 다릅니다. CNAME Swap은 별도의 Beanstalk 환경(스테이징/프로덕션)이 이미 준비된 경우에 최적입니다. DNS 레벨의 전환이므로 제로 다운타임에 가깝습니다. Immutable은 단일 환경 내에서 처리하므로 별도 환경 관리가 불필요합니다.

!CNAME Swap vs Immutable 배포

Lambda 배포 전략

Lambda Alias와 버전

Lambda 버전은 게시된 순간의 코드와 설정의 불변 스냅샷입니다. Lambda Alias는 특정 버전(또는 두 버전)에 대한 포인터입니다. 호출 측이 별칭 ARN을 사용하면 코드 변경 없이 내부적으로 다른 버전으로 트래픽을 전환할 수 있습니다.

CodeDeploy Lambda 배포 구성

LambdaCanary10Percent5Minutes: 처음 5분간 10% 트래픽, 이후 100% 전환 LambdaLinear10PercentEvery1Minute: 매분 10%씩 선형 증가하여 10분에 100%

appspec.yml의 BeforeAllowTraffic 훅: 트래픽 전환 직전 검증 Lambda를 실행합니다. DB 스키마 마이그레이션 완료 여부, API 엔드포인트 준비 상태 등을 검증하고 실패 시 자동 롤백합니다.

SAM AutoPublishAlias + DeploymentPreference

SAM 템플릿에서 AutoPublishAlias와 DeploymentPreference를 설정하면 코드 변경 시 자동으로 새 Lambda 버전을 게시하고 CodeDeploy 카나리 배포를 트리거합니다. 기존 CI/CD를 변경하지 않고 SAM 템플릿 YAML 수정만으로 카나리 배포를 적용할 수 있습니다.

 

ECS 배포 전략

ECS Rolling Update

서비스 업데이트 시 새 태스크 정의로 태스크를 점진적으로 교체합니다. MinimumHealthyPercent와 MaximumPercent로 교체 비율을 제어합니다. 간단하지만 테스트 리스너 분리나 즉각적인 롤백이 불가합니다.

CodeDeploy ECS Blue/Green

ALB에 테스트 리스너(포트 8080)와 프로덕션 리스너(포트 80)를 분리 구성합니다. 새 태스크 세트(Green)가 테스트 리스너를 통해 먼저 검증되고, 검증 성공 시 프로덕션 트래픽이 전환됩니다. AppSpec의 AfterAllowTestTraffic 훅으로 Green 환경의 자동화된 테스트를 실행합니다. 문제 발생 시 Blue 태스크 세트로 즉시 롤백됩니다.

ECR 이미지 latest 태그 문제: 동일한 latest 태그로 새 이미지가 푸시되어도 이미 실행 중인 태스크는 캐시된 이전 이미지를 사용할 수 있습니다. 이미지 다이제스트로 고정하고 빌드 시 의존성을 Dockerfile에 번들링하는 것이 모범 사례입니다.

 

시험 핵심 정리

"EC2 Auto Scaling 수백 대 인스턴스에 새 AMI 무중단 교체" -- ASG Instance Refresh (Launch Template AMI 업데이트 후 시작, MinHealthyPercentage 유지)

"배포 중 전체 용량 유지 + 추가 비용 최소화 (Beanstalk)" -- Rolling with additional batch (Immutable보다 비용 효율적)

"Beanstalk 단일 환경 내 무중단 배포 + 즉각 롤백" -- Immutable 배포

"두 Beanstalk 환경 간 즉각적 트래픽 전환 + 롤백" -- URL Swap(CNAME 교체)

"EC2 기반 카나리 배포, 비율 세밀 제어" -- ALB 가중치 기반 타겟 그룹 (두 ASG + 가중치 조정)

"Lambda 새 버전 10% 먼저 검증 후 점진 전환 + 자동 롤백" -- CodeDeploy LambdaCanary + CloudWatch Alarm 롤백 트리거

"Lambda 트래픽 전환 전 DB 스키마 준비 상태 자동 검증" -- CodeDeploy BeforeAllowTraffic 훅 (검증 Lambda)

"ECS 프로덕션 트래픽 전환 전 Green 환경 격리 검증" -- CodeDeploy ECS Blue/Green + 테스트 리스너(포트 8080) + AfterAllowTestTraffic 훅

"인스턴스 부팅 시간 단축 (라이브러리 사전 설치)" -- EC2 Image Builder로 Golden AMI 생성

"ECS 태스크가 항상 정확한 이미지 버전 사용 보장" -- ECR 이미지 다이제스트(sha256) 고정 + 빌드 시 의존성 번들링

블로그 목록으로 돌아가기