본문 바로가기
Cloud Native/AWS: Automation

8. Serverless Application Model (SAM) & CDK

by jys275 2026. 3. 4.

1. Serverless Application Model (SAM) - Overview

 

개요 및 배경

  • 서버리스 애플리케이션의 개발, 테스트 및 배포를 간소화하기 위한 전용 프레임워크
  • 간단한 YAML 형식의 SAM 템플릿을 작성하면, 이면에서 복잡한 AWS CloudFormation 템플릿으로 자동 변환(Transform)되어 리소스가 프로비저닝됨
  • 로컬 환경에서 Lambda, API Gateway, DynamoDB를 직접 실행하고 디버깅할 수 있는 기능을 제공하여 개발 편의성을 높임

주요 리소스 및 기능

  1. SAM 템플릿 구조 및 구성 요소
    • 템플릿 최상단에 반드시 Transform 헤더를 선언하여 CloudFormation이 해당 파일을 SAM 템플릿으로 인식하고 변환하도록 지시해야 함
    • 전용 서버리스 추상화 리소스 지원: AWS::Serverless::Function (Lambda), AWS::Serverless::Api (API Gateway), AWS::Serverless::SimpleTable (DynamoDB)
    • Parameters, Mappings, Outputs 등 기존 CloudFormation의 모든 문법 및 구성 요소와 완벽하게 호환됨
  2. SAM CLI 주요 명령어
    • sam build: 로컬에서 애플리케이션 코드를 빌드하고 배포 가능한 템플릿 형태로 준비함
    • sam deploy: 코드를 패키징(Zip 변환 후 S3 업로드)하고 CloudFormation 변경 세트(ChangeSet)를 실행하여 실제 AWS 환경에 배포함 (과거 sam package와 deploy가 통합됨)
  3. SAM Accelerate (sam sync)
    • 개발 단계에서 AWS 클라우드로의 리소스 배포 지연 시간(Latency)을 최소화하는 고속 동기화 기능임
    • 인프라 설정 변경 없이 애플리케이션 코드만 수정된 경우, CloudFormation 스택 업데이트를 우회하고 서비스 API를 직접 호출하여 수 초 내에 배포를 완료함
    • sam sync --watch: 백그라운드에서 파일 변경 사항을 모니터링하여 감지 즉시 자동 동기화를 수행함
    • sam sync --code: 인프라 구성을 무시하고 오직 코드 부분만 클라우드와 동기화함

헷갈리는 포인트 (Tips)

  • SAM 템플릿이 일반 CloudFormation 템플릿과 구분되는 가장 핵심적인 특징은 최상단의 Transform 선언 여부임. 이 선언이 누락되면 CloudFormation은 서버리스 전용 리소스 구문을 해석하지 못하고 배포에 실패함
  • 단순한 애플리케이션 로직 수정 후 sam deploy를 사용하면 CloudFormation의 전체 스택 검증 및 업데이트 과정을 거치므로 속도가 느림. 개발 중 빠른 피드백이 필요할 때는 sam sync를 사용하여 배포 단계를 건너뛰는 것이 모범 사례임
  • SAM은 이면에서 Lambda 함수의 안전한 버전 배포 및 점진적 트래픽 전환을 수행하기 위해 내부적으로 AWS CodeDeploy와 연동됨

2. Serverless Application Model (SAM) - CodeDeploy

 

개요 및 배경

  • AWS SAM을 사용하여 서버리스 애플리케이션(Lambda) 배포 시, 내부적으로 AWS CodeDeploy와 연동하여 안전한 트래픽 전환(Traffic Shifting)을 구현하는 실습임
  • 새로운 코드 배포 시 한 번에 모든 트래픽을 넘기지 않고 카나리(Canary) 또는 선형(Linear) 방식으로 점진적으로 전환하여 시스템 안정성을 보장함
  • 사전/사후 트래픽 훅(Pre/Post-traffic Hooks) 및 CloudWatch 경보(Alarms) 기반의 자동 롤백을 설정할 수 있음

주요 리소스 및 기능

  1. SAM 템플릿의 CodeDeploy 통합 설정 (template.yaml)
    • AutoPublishAlias: SAM이 새 코드 배포를 감지하면 자동으로 새로운 Lambda 버전(Version)을 생성하고, 지정된 별칭(Alias, 예: live)이 새 버전을 가리키도록 업데이트함
    • DeploymentPreference: CodeDeploy의 트래픽 전환 방식을 정의함 (예: Canary10Percent10Minutes - 10분 동안 새 버전에 10%의 트래픽만 전송하여 검증한 후, 100%로 전환함)
    • Alarms / Hooks: 배포 중 모니터링할 경보 목록과 트래픽 전환 전후에 실행할 검증용 Lambda 함수를 명시함
  2. 배포 워크플로우 실습
    • sam build: 애플리케이션 코드(app.py)와 의존성을 로컬에서 빌드함
    • sam deploy --guided: 대화형 프롬프트를 통해 스택 이름, 리전 등을 설정하고 변경 세트(ChangeSet)를 확인한 후 클라우드에 배포함
  3. 상태 모니터링 및 트래픽 전환 과정
    • 배포가 시작되면 AWS CodeDeploy 콘솔에서 Blue/Green 배포 진행 상황을 실시간으로 확인할 수 있음
    • Lambda 콘솔의 별칭(Alias) 설정에서 가중치(Weight)가 점진적으로 변경되는 것을 확인함 (예: 기존 버전 90%, 새 버전 10%)
    • 지정된 시간(10분) 동안 문제가 없으면 CodeDeploy가 트래픽 전환을 완료하고, 별칭이 100% 새 버전(v2)을 가리키게 됨

헷갈리는 포인트 (Tips)

  • SAM 템플릿 내에서 CodeDeploy 배포 기본 설정을 활성화하려면, 템플릿의 Resources 하위 Lambda 함수 정의(AWS::Serverless::Function) 내에 반드시 AutoPublishAliasDeploymentPreference 속성을 추가해야 함
  • Lambda 플랫폼에 대한 CodeDeploy 배포는 EC2와 달리 appspec.yml 파일을 수동으로 작성할 필요가 없으며, SAM 템플릿의 DeploymentPreference 블록 설정만으로 이면에서 자동으로 구성이 완료됨

1. Cloud Development Kit (CDK) - Overview

 

개요 및 배경

  • JSON이나 YAML 기반의 기존 템플릿 방식 대신, 익숙한 프로그래밍 언어(TypeScript, Python, Java, .NET 등)를 사용하여 클라우드 인프라를 정의함
  • 코드를 컴파일(Synthesize)하여 백그라운드에서 AWS CloudFormation 템플릿을 자동 생성함
  • 프로그래밍 언어의 타입 안전성(Typesafe)을 활용하므로, 인프라 배포 전 컴파일 단계에서 구성 오류를 사전에 포착하여 방지함

주요 리소스 및 기능

  1. 컨스트럭트 (Constructs)
    • 인프라를 구성하는 고수준(High-level) 클라우드 컴포넌트로, AWS의 모범 사례가 적용된 기본 구성값을 내장하고 있음
    • 단 몇 줄의 코드로 복잡한 아키텍처(예: 다중 AZ를 가진 VPC, 로드 밸런서가 연결된 ECS Fargate 서비스 등)를 쉽게 프로비저닝함
    • 인프라 구성 코드와 애플리케이션 런타임 코드(Lambda 함수, Docker 컨테이너 등)를 동일한 프로젝트 내에서 함께 관리하고 배포함
  2. AWS SAM과의 비교 및 통합
    • SAM: 서버리스(Serverless) 애플리케이션에 특화되어 있으며, 선언적인 YAML/JSON 파일 형식을 사용함
    • CDK: CloudFormation의 상위 집합(Super-set)으로 모든 AWS 서비스를 지원하며, 반복문(for/while)이나 조건문(if/else) 등의 프로그래밍 로직을 활용해 인프라를 제어함
    • 로컬 연동 테스트: cdk synth 명령어로 CloudFormation 템플릿을 먼저 생성한 뒤, sam local invoke 명령어를 사용하여 CDK로 정의된 Lambda 함수를 로컬에서 직접 테스트함

헷갈리는 포인트 (Tips)

  • CDK는 CloudFormation을 완전히 대체하는 독립적인 배포 엔진이 아니라, 프로그래밍 언어로 작성된 코드를 기반으로 CloudFormation 템플릿을 동적으로 생성(Synthesize)해주는 상위 수준의 프레임워크임 (실제 프로비저닝은 CloudFormation 엔진이 수행함)
  • 단순히 인프라만 생성하는 것이 아니라 애플리케이션 로직(예: S3 이벤트로 Lambda를 트리거하고, Rekognition으로 이미지를 분석하여 DynamoDB에 저장하는 전체 파이프라인)을 하나의 코드 베이스에서 객체 지향적으로 구성할 수 있음

'Cloud Native > AWS: Automation' 카테고리의 다른 글

10. Systems Manager (SSM)  (0) 2026.03.04
9. Elastic Beanstalk  (0) 2026.03.04
7. CloudFormation  (0) 2026.03.03
6. CodeArtifact  (0) 2026.03.03
5. CodeDeploy  (0) 2026.03.03