새발블로그
[AWS SAA] 배포 / 인프라 자동화 본문

CloudFormation
핵심 개념
- CloudFormation은 AWS 인프라를 코드로 정의하고 프로비저닝하는 IaC 서비스
- IaC는 Infrastructure as Code의 약자
- AWS 리소스를 YAML 또는 JSON 템플릿으로 정의
- 템플릿을 기반으로 스택을 생성, 업데이트, 삭제할 수 있음
- 동일한 인프라를 반복적으로 생성하거나 여러 환경에 일관되게 배포할 때 유용
- 수동 콘솔 작업을 줄이고 인프라 변경 이력을 코드로 관리할 수 있음
CloudFormation 주요 개념
| 항목 | 내용 |
| 템플릿 | AWS 리소스를 정의하는 YAML 또는 JSON 파일 |
| 스택 | 템플릿으로 생성된 리소스 묶음. 생성/업데이트/삭제 단위 |
| 변경 세트 | 스택 업데이트 전 변경될 내용을 미리 확인하는 기능 |
| 중첩 스택 | 부모 스택 안에서 AWS::CloudFormation::Stack 리소스로 다른 스택을 호출하는 구조 |
| 파라미터 | 템플릿 실행 시 입력받는 값. AMI ID, 인스턴스 타입, 키 페어 이름 등에 사용 |
| 출력값 | 스택 생성 후 반환되는 값. VPC ID, ALB DNS 이름 등을 다른 스택에서 참조 가능 |
| 매핑 | 리전별 AMI ID처럼 조건에 따라 다른 값을 선택할 때 사용 |
| 조건 | 환경별로 특정 리소스를 생성하거나 생략할 때 사용 |
CloudFormation 변경 세트
- 변경 세트는 스택을 업데이트하기 전에 어떤 리소스가 생성, 수정, 삭제될지 미리 보여주는 기능
- 변경 내용을 검토한 뒤 실제 업데이트를 실행할 수 있음
- 운영 환경에서 실수로 리소스를 삭제하거나 교체하는 위험을 줄이는 데 유용
- 템플릿 변경 시 CloudFormation이 항상 전체 리소스를 재배포하는 것은 아님
- 필요한 리소스만 생성, 수정, 삭제함
- 단, 일부 속성 변경은 리소스 교체가 필요할 수 있으므로 변경 세트를 확인해야 함
- 리소스 교체가 발생하면 기존 리소스가 삭제되고 새 리소스가 생성될 수 있어 주의 필요
CloudFormation 드리프트 감지
- 드리프트는 CloudFormation 템플릿의 예상 상태와 실제 리소스 상태가 달라진 상태를 의미
- 예를 들어 콘솔에서 직접 보안 그룹 규칙을 수정하면 CloudFormation 템플릿과 실제 리소스 상태가 달라질 수 있음
- 드리프트 감지를 사용하면 스택 리소스가 템플릿과 다르게 변경되었는지 확인 가능
- 운영 환경에서 수동 변경을 추적하고 IaC 기준 상태를 유지하는 데 유용
- 드리프트 감지는 모든 리소스 속성을 완벽하게 감지하는 것은 아니므로 지원 범위를 확인해야 함
CloudFormation 중첩 스택
- 중첩 스택은 큰 템플릿을 여러 작은 템플릿으로 나누어 관리하는 방식
- 공통 네트워크, 보안, 애플리케이션 리소스 등을 재사용 가능한 스택 단위로 나눌 수 있음
- 부모 스택에서 AWS::CloudFormation::Stack 리소스를 사용해 자식 스택을 호출
- 여러 환경에서 반복 사용하는 리소스 구조를 모듈화할 때 유용
CloudFormation과 AWS Config
- CloudFormation은 인프라를 정의하고 배포하는 서비스
- AWS Config는 리소스 구성 변경을 추적하고 규정 준수 여부를 평가하는 서비스
- 예를 들어 보안 그룹이 SSH를 전체 공개하고 있는지 Config 규칙으로 평가할 수 있음
- 비준수 리소스가 발견되면 SNS, EventBridge, Systems Manager Automation 등과 연동하여 알림이나 자동 조치를 구성할 수 있음
- CloudFormation은 배포 자동화, Config는 구성 감사와 규정 준수 평가에 가깝다
Elastic Beanstalk
핵심 개념
- Elastic Beanstalk는 애플리케이션 코드만 업로드하면 배포와 운영 환경 구성을 자동으로 처리해주는 PaaS 서비스
- PaaS는 Platform as a Service의 약자
- EC2, ELB, Auto Scaling, 보안 그룹 등 필요한 인프라를 자동으로 구성
- Node.js, Java, Python, PHP, .NET, Go, Ruby 등 다양한 플랫폼 지원
- 개발자는 인프라 세부 구성보다 애플리케이션 배포에 집중할 수 있음
- 내부적으로 CloudFormation을 사용하여 환경 리소스를 생성하고 관리
- 인프라를 직접 세밀하게 제어해야 하는 경우에는 EC2, ECS, EKS, CloudFormation, CDK 등을 고려
- 빠르게 웹 애플리케이션을 배포하고 운영 부담을 줄이고 싶을 때 적합
Elastic Beanstalk 배포 정책
| 배포 정책 | 설명 | 특징 |
| All at Once | 모든 인스턴스를 한 번에 새 버전으로 배포 | 가장 빠르지만 배포 중 가동 중지 가능 |
| Rolling | 인스턴스를 배치 단위로 나누어 순차 배포 | 일부 용량 감소, 구버전/신버전이 함께 동작할 수 있음 |
| Rolling with Additional Batch | 추가 인스턴스 배치를 만든 뒤 Rolling 배포 | 용량 감소 없이 배포 가능하지만 추가 비용 발생 |
| Immutable | 새 Auto Scaling 그룹에 새 버전을 배포한 뒤 전환 | 안전하지만 배포 시간이 길고 비용 증가 |
| Traffic Splitting | 새 버전에 일부 트래픽만 보내 검증 후 전체 전환 | Canary 테스트에 적합 |
| Blue/Green | 별도 환경을 만들고 CNAME 또는 DNS 전환 | 빠른 롤백 가능, 비용 증가 |
- All at Once는 가장 단순하고 빠르지만 배포 중 서비스 중단 가능성이 있음
- Rolling은 배치 단위로 업데이트하므로 All at Once보다 안정적이지만 배포 중 일부 용량이 줄어들 수 있음
- Rolling with Additional Batch는 추가 인스턴스를 사용하여 배포 중 용량 감소를 줄임
- Immutable은 새 인스턴스 그룹을 만들어 새 버전을 검증한 뒤 전환하므로 안정성이 높음
- Traffic Splitting은 일부 트래픽만 새 버전으로 보내는 Canary 배포에 적합
- Blue/Green은 새 환경을 별도로 만들고 DNS 또는 CNAME을 전환하므로 롤백이 빠름
CI/CD 파이프라인
핵심 서비스
| 서비스 | 설명 |
| CodeBuild | 소스 코드를 빌드하고 테스트하는 완전 관리형 빌드 서비스 |
| CodeDeploy | EC2, 온프레미스 서버, ECS, Lambda 등에 애플리케이션을 자동 배포하는 서비스 |
| CodePipeline | 소스, 빌드, 테스트, 배포 단계를 연결하여 CI/CD 파이프라인을 구성하는 서비스 |
- CI는 Continuous Integration의 약자
- CD는 Continuous Delivery 또는 Continuous Deployment의 약자
- CodeBuild는 컴파일, 테스트, 패키징 작업에 사용
- CodeDeploy는 배포 대상에 애플리케이션을 배포하는 데 사용
- CodePipeline은 소스 변경부터 빌드, 테스트, 배포까지 전체 흐름을 자동화
- 자동화 파이프라인 예시는 CodeCommit 또는 GitHub → CodeBuild → CodeDeploy → 프로덕션 구조로 구성 가능
- 소스 저장소는 CodeCommit뿐 아니라 GitHub, Bitbucket, S3 등도 사용할 수 있음
CodeDeploy
핵심 개념
- CodeDeploy는 애플리케이션 배포를 자동화하는 서비스
- EC2/온프레미스, ECS, Lambda 배포를 지원
- 배포 중 상태를 추적하고 실패 시 롤백을 구성할 수 있음
- EC2/온프레미스 배포에서는 CodeDeploy Agent가 필요
- Lambda와 ECS 배포에서는 트래픽 전환 방식으로 새 버전을 점진 배포할 수 있음
Lambda + CodeDeploy 배포
| 배포 방식 | 설명 |
| Canary | 일부 비율의 트래픽을 새 Lambda 버전으로 먼저 전환 후 나머지 전환 |
| Linear | 일정 비율씩 일정 간격으로 새 Lambda 버전으로 전환 |
| All-at-once | 모든 트래픽을 새 Lambda 버전으로 한 번에 전환 |
- Lambda 배포에서는 Alias를 통해 새 버전으로 트래픽을 전환
- Canary는 위험을 줄이고 새 버전을 검증하면서 배포할 때 적합
- Linear는 점진적으로 트래픽을 늘리며 배포할 때 적합
- All-at-once는 빠르지만 문제가 발생하면 영향 범위가 큼
- CloudWatch Alarm과 연동하여 배포 실패 시 자동 롤백 구성 가능
배포 전략 비교
| 전략 | 설명 | 다운타임 | 롤백 | 비용 |
| All at Once | 모든 인스턴스 동시 업데이트 | 발생 가능 | 느릴 수 있음 | 낮음 |
| Rolling | 순차적으로 인스턴스를 배치로 나눠 업데이트 | 보통 없음, 단 용량 감소 가능 | 느릴 수 있음 | 낮음 |
| Rolling with Additional Batch | Rolling + 추가 인스턴스 배치 사용 | 보통 없음 | 느릴 수 있음 | 약간 높음 |
| Immutable | 새 인스턴스를 별도 그룹에 배포 후 전환 | 거의 없음 | 빠름 | 높음 |
| Blue/Green | 기존 환경과 동일한 새 환경 생성 후 트래픽 전환 | 거의 없음 | 매우 빠름 | 높음 |
| Canary / Traffic Splitting | 일부 트래픽만 새 버전으로 전환 후 점진 확대 | 거의 없음 | 빠름 | 높음 |
- Blue/Green은 새 환경을 별도로 만들기 때문에 롤백이 빠르고 안전함
- Canary는 새 버전의 위험을 최소화하며 점진적으로 적용할 때 적합
- Immutable은 기존 인스턴스를 직접 수정하지 않고 새 인스턴스로 교체하는 방식
- Rolling은 비용이 낮지만 배포 중 구버전과 신버전이 함께 동작할 수 있음
- All at Once는 단순하고 빠르지만 가동 중지 시간이 발생할 수 있음
CDK
- CDK는 Cloud Development Kit의 약자
- TypeScript, Python, Java, C#, Go 등 프로그래밍 언어로 AWS 인프라를 정의하는 도구
- 코드 기반으로 인프라를 정의하고 재사용 가능한 구성 요소를 만들 수 있음
- 내부적으로 CloudFormation 템플릿으로 변환되어 배포됨
- 복잡한 인프라 패턴을 코드로 추상화하고 재사용하기 좋음
- 반복되는 리소스 구성을 함수, 클래스, Construct로 모듈화할 수 있음
- 개발자가 익숙한 프로그래밍 언어로 IaC를 작성하고 싶을 때 적합
OpsWorks
- OpsWorks는 Chef와 Puppet 기반의 구성 관리 서비스
- 서버 환경과 애플리케이션 구성을 코드로 관리하는 데 사용
- 기존 Chef/Puppet 워크플로를 AWS로 이전하거나 하이브리드로 운영할 때 고려
- EC2 인스턴스의 패키지 설치, 서비스 구성, 애플리케이션 배포 같은 서버 구성 관리에 사용
- 신규 워크로드에서는 Systems Manager, CloudFormation, CDK, Elastic Beanstalk, ECS 같은 서비스를 우선 고려하는 경우가 많음
- 시험에서는 “Chef/Puppet 기반 구성 관리”가 나오면 OpsWorks를 떠올리면 됨
AWS Service Catalog
- AWS Service Catalog는 조직에서 승인한 AWS 서비스와 구성을 중앙에서 배포하고 관리하는 서비스
- 관리자는 승인된 제품을 포트폴리오로 구성
- 사용자는 허용된 제품만 셀프서비스 방식으로 배포 가능
- 표준화된 EC2, RDS, 네트워크 구성 등을 안전하게 배포할 때 사용
- 권한, 제약 조건, 태그 등을 적용하여 거버넌스를 강화할 수 있음
- Control Tower와 함께 다중 계정 거버넌스 요구사항에서 자주 등장
- 개발팀에게 자유로운 배포 권한을 주되, 승인된 구성만 사용하게 하고 싶을 때 적합
배포 / 인프라 자동화 서비스 선택 기준 요약
| 요구사항 | 적합한 서비스 |
| AWS 인프라를 YAML/JSON으로 정의 | CloudFormation |
| 스택 업데이트 전 변경 사항 검토 | CloudFormation Change Set |
| 실제 리소스와 템플릿 차이 확인 | CloudFormation Drift Detection |
| 큰 템플릿을 모듈화 | CloudFormation Nested Stack |
| 애플리케이션 코드 중심의 빠른 PaaS 배포 | Elastic Beanstalk |
| Beanstalk에서 가장 단순한 배포 | All at Once |
| Beanstalk에서 용량 감소 없이 순차 배포 | Rolling with Additional Batch |
| Beanstalk에서 가장 안전한 새 인스턴스 기반 배포 | Immutable |
| Beanstalk에서 일부 트래픽만 새 버전으로 전환 | Traffic Splitting |
| 소스 빌드와 테스트 | CodeBuild |
| EC2/ECS/Lambda 자동 배포 | CodeDeploy |
| 전체 CI/CD 파이프라인 구성 | CodePipeline |
| Lambda Canary/Linear 배포 | CodeDeploy |
| 프로그래밍 언어로 IaC 작성 | CDK |
| Chef/Puppet 기반 구성 관리 | OpsWorks |
| 승인된 AWS 구성만 배포하도록 관리 | AWS Service Catalog |
| 여러 계정의 랜딩존과 거버넌스 | Control Tower |
| 리소스 구성 준수 평가 | AWS Config |
'자격증 > SAA' 카테고리의 다른 글
| [AWS SAA] 분석 / 데이터 처리 (0) | 2026.06.23 |
|---|---|
| [AWS SAA] 재해복구 / 마이그레이션 (0) | 2026.06.23 |
| [AWS SAA] 비용 최적화 (0) | 2026.06.22 |
| [AWS SAA] 서버리스 (0) | 2026.06.22 |
| [AWS SAA] 애플리케이션 통합 (0) | 2026.06.22 |