AWS Certified Developer - Associate (DVA-C02) #10 Domain 3-2 배포: IaC와 서버리스 배포

5 분 소요

#9 CI/CD에서 빌드,배포 도구를 정리했으니, 이번에는 **인프라 자체를 코드로 정의하는 IaC(Infrastructure as Code)**입니다. 콘솔에서 손으로 만든 인프라는 재현,버전 관리가 어렵습니다. AWS의 IaC 축은 CloudFormation이고, 그 위에 서버리스 전용 SAM, 그리고 플랫폼 추상화인 Elastic Beanstalk가 있습니다.

CloudFormation #

선언적 템플릿(YAML/JSON)으로 AWS 리소스를 정의하면, CloudFormation이 그대로 생성,갱신,삭제합니다. 생성된 리소스 묶음이 **스택(Stack)**입니다.

템플릿 구조 #

섹션역할
Resources유일한 필수 섹션. 생성할 리소스 정의
Parameters배포 시 입력값(환경,인스턴스 타입 등)
Mappings키-값 룩업(리전별 AMI 등)
Conditions조건부 리소스 생성
Outputs다른 스택이 참조할 출력값(export)
Transform매크로,SAM 지정

내장 함수도 자주 나옵니다. !Ref(참조), !GetAtt(속성 가져오기), !Sub(문자열 치환), !FindInMap(매핑 조회), !ImportValue(다른 스택 출력 참조).

스택 운영 #

  • 체인지셋(Change Set). 스택을 갱신하기 전에 무엇이 바뀌는지 미리 확인합니다. 의도치 않은 교체,삭제를 방지합니다.
  • 드리프트 감지(Drift Detection). 콘솔에서 수동으로 바뀐 부분(템플릿과의 차이)을 탐지합니다.
  • 롤백. 생성/갱신 실패 시 자동으로 이전 상태로 되돌립니다.
  • 중첩 스택(Nested Stack). 공통 구성요소를 재사용 가능한 하위 스택으로 분리합니다.
  • DeletionPolicy. 스택 삭제 시 리소스를 보존(Retain)하거나 스냅샷(Snapshot)을 남깁니다. DB처럼 잃으면 안 되는 리소스에 씁니다.

시험 함정: “스택 업데이트 전에 영향 범위를 확인"의 답은 체인지셋입니다. “삭제해도 DB는 남기고 싶다"의 답은 **DeletionPolicy: Retain**입니다.

SAM: 서버리스 애플리케이션 모델 #

SAM은 서버리스 배포를 단순화한 CloudFormation 확장입니다. 템플릿 상단에 Transform: AWS::Serverless-2016-10-31을 두면 SAM 단축 리소스 타입을 쓸 수 있습니다.

SAM 리소스대응
AWS::Serverless::FunctionLambda 함수 + 역할 + 이벤트 소스
AWS::Serverless::ApiAPI Gateway
AWS::Serverless::SimpleTableDynamoDB 테이블
  • sam build. 의존성 포함 빌드.
  • sam deploy. CloudFormation으로 패키징,배포(내부적으로 S3 업로드 + 스택 생성).
  • sam local. Lambda,API를 로컬에서 실행,디버깅(Docker 사용).
  • SAM 템플릿은 배포 시 일반 CloudFormation으로 변환됩니다.

핵심: 서버리스 앱(Lambda + API Gateway + DynamoDB)을 적은 코드로 정의,배포,로컬 테스트하려면 SAM입니다. SAM은 #11의 카나리/선형 배포와 자동 롤백도 AutoPublishAlias,DeploymentPreference로 간단히 지원합니다.

Elastic Beanstalk #

코드를 올리면 EC2,ELB,ASG,헬스 모니터링을 자동으로 프로비저닝하는 플랫폼 추상화(PaaS)입니다. 개발자는 인프라가 아니라 애플리케이션에 집중합니다. 내부적으로는 CloudFormation으로 리소스를 만듭니다.

배포 정책 #

Beanstalk의 배포 정책은 시험 단골입니다.

정책동작다운타임추가 비용
All at once전체를 한 번에 교체있음없음
Rolling일부 배치씩 교체없음(용량 감소)없음
Rolling with additional batch새 배치를 추가하며 교체없음(용량 유지)일시적 추가 인스턴스
Immutable새 인스턴스 그룹에 배포 후 전환없음일시적 두 배
Blue/Green(환경 교체)새 환경에 배포 후 URL 스왑없음두 배

핵심 구분: 가장 안전하고 롤백이 쉬운 건 Immutable/Blue-Green(새 인스턴스에 배포), 가장 빠르지만 다운타임 있는 건 All at once, 용량을 유지하며 점진 교체는 Rolling with additional batch입니다.

  • .ebextensions. .config 파일로 환경,리소스를 커스터마이즈합니다.
  • Beanstalk는 EC2,컨테이너 기반 웹앱에 적합하며, 순수 서버리스(Lambda)에는 SAM이 더 맞습니다.

IaC 선택 빠른 표 #

요구사항정답
임의의 AWS 리소스를 코드로CloudFormation
서버리스(Lambda/API GW/DynamoDB)를 간결하게SAM
인프라 신경 쓰지 않고 웹앱만 올리기Elastic Beanstalk
스택 갱신 영향 미리 확인체인지셋
로컬에서 Lambda 테스트sam local

시험 출제 패턴 #

  • “서버리스 앱을 적은 코드로 정의,배포.” → SAM.
  • “Lambda를 로컬에서 디버깅.” → sam local invoke.
  • “스택을 갱신하기 전에 변경 영향을 확인.” → 체인지셋.
  • “스택 삭제 시 RDS는 보존.” → DeletionPolicy: Retain.
  • “인프라 관리 없이 웹앱을 빠르게 배포.” → Elastic Beanstalk.
  • “다운타임 없이 안전하게, 롤백 쉽게 배포.” → Immutable / Blue-Green.
  • “리전별로 다른 AMI를 선택.” → Mappings + !FindInMap.

정리 #

이번 글에서 잡은 것:

  • CloudFormation. Resources만 필수. 체인지셋(영향 확인),드리프트,중첩 스택,DeletionPolicy
  • SAM. 서버리스용 CFN 확장. sam build/deploy/local, 카나리 배포 내장
  • Elastic Beanstalk. PaaS. 배포 정책(All at once/Rolling/Immutable/Blue-Green)의 트레이드오프
  • 안전,롤백 우선은 Immutable/Blue-Green, 속도 우선은 All at once

다음: Domain 3-3 배포 전략 #

도구를 정리했으니 마지막은 무중단 배포 전략 자체입니다. #11 배포 전략에서는 in-place vs blue/green, 카나리와 선형 배포, Lambda 별칭,버전과 가중치 라우팅, 그리고 CodeDeploy/SAM의 자동 롤백을 정리하겠습니다.

X