2459 단어
12 분
⚡ AWS Serverless

⚡ AWS Serverless#

Lambda · API Gateway · DynamoDB · Step Functions · Cognito

서버를 프로비저닝하지 않고 코드와 함수만 배포하는 패러다임


목차#

  1. Serverless 개요
  2. AWS Lambda
  3. CloudFront Functions vs. Lambda@Edge
  4. Amazon DynamoDB
  5. Amazon API Gateway
  6. AWS Step Functions
  7. Amazon Cognito
  8. 📌 시험 자주 출제 포인트

Serverless 개요#

Serverless ≠ 서버가 없음 — 서버를 관리/프로비저닝하지 않는 것

AWS Serverless 서비스#

AWS Lambda, DynamoDB, Amazon Cognito, API Gateway

Amazon S3, SNS, SQS, Kinesis Data Firehose

Aurora Serverless, Step Functions, Fargate


AWS Lambda#

EC2 vs. Lambda#

항목EC2Lambda
서버직접 프로비저닝관리 불필요
실행 방식항상 실행 중On-demand (요청 시 실행)
시간 제한없음최대 15분 (900초)
스케일링수동 또는 ASG자동
과금실행 여부 무관요청 수 + 실행 시간

Lambda 제한 (Limits) — per Region#

📌 시험 빈출 수치

실행 (Execution):

항목제한
Memory128 MB ~ 10 GB (1 MB 단위)
Max Execution Time900초 (15분)
Environment Variables4 KB
/tmp 디스크512 MB ~ 10 GB
Concurrent Executions1,000 (증가 요청 가능)

배포 (Deployment):

항목제한
압축 .zip 크기50 MB
비압축 코드 + 의존성250 MB
Environment Variables4 KB

💡 RAM을 늘리면 CPU와 네트워크 성능도 함께 향상됨.


Lambda 지원 런타임#

  • Node.js, Python, Java, C#/PowerShell, Ruby
  • Custom Runtime API: Rust, Golang 등
  • Lambda Container Image: Lambda Runtime API를 구현한 컨테이너 이미지 사용 가능
    • 임의의 Docker Image는 ECS/Fargate 권장 (Lambda Container Image와 다름)

Lambda 가격#

과금 항목내용
요청 수1,000,000 req 무료 / 이후 $0.20 / 100만 req
실행 시간400,000 GB-seconds 무료 / 이후 $1.00 / 600,000 GB-sec

400,000 GB-sec = 1GB RAM → 400,000초 / 128MB RAM → 3,200,000초


Lambda Concurrency & Throttling (동시 실행 및 조절)#

계정당 기본 동시 실행 한도: 1,000개
Throttle 발생 시:
├── Synchronous 호출 → 429 ThrottleError 즉시 반환
└── Asynchronous 호출 → 자동 재시도 (최대 6시간, 지수 백오프)
→ 최종 실패 시 DLQ(Dead Letter Queue)

Reserved Concurrency (예약 동시 실행):

  • 특정 함수에 동시 실행 상한을 예약 설정
  • 다른 함수가 한도를 다 쓰지 못하도록 보호
  • 여러 Lambda가 같은 계정 한도를 공유하므로 한 함수가 폭발적 요청 시 다른 함수 Throttle 가능

Cold Start & Provisioned Concurrency#

Cold Start 문제:

새 인스턴스 시작 → 코드 로드 + Init 코드 실행 (handler 외부)
→ 첫 요청의 지연 시간 높음 (대형 패키지/SDK 사용 시 더 심각)

Provisioned Concurrency:

  • 함수 호출 전에 미리 인스턴스를 워밍업 → Cold Start 없음
  • Application Auto Scaling으로 스케줄 또는 목표 활용률 기반 관리

Lambda SnapStart (Java / Python / .NET)#

  • 최대 10배 성능 향상 (추가 비용 없음)
  • 새 버전 배포 시 Lambda가 함수를 초기화하고 메모리/디스크 Snapshot 저장
  • 이후 호출은 저장된 Snapshot에서 즉시 시작 → Init 과정 생략
SnapStart 비활성화: invoke → [Init → invoke → shutdown]
SnapStart 활성화: invoke → [snapshot에서 복원 → invoke → shutdown]

Lambda Networking (VPC 연동)#

기본 동작 (Default):

Lambda는 AWS 소유 VPC에서 실행
→ 고객 VPC의 RDS, ElastiCache, 내부 ELB에 접근 불가

Lambda in VPC:

Lambda → ENI(Elastic Network Interface) 생성 → 지정 Subnet에 연결
→ VPC 내 리소스(RDS, ElastiCache 등) 접근 가능
  • VPC ID, Subnet, Security Group 지정 필요

Lambda + RDS Proxy:

[많은 Lambda 호출] → [RDS Proxy] → [RDS/Aurora]
(직접 연결 시 DB Connection 과다) (Connection Pooling으로 보호)
  • RDS Proxy는 Public 접근 불가 → Lambda도 반드시 VPC 내 배포 필요
  • IAM 인증 강제 + Secrets Manager 연동

Lambda에서 RDS/Aurora 호출 (Invoke Lambda from DB)#

  • RDS for PostgreSQL, Aurora MySQL에서 DB 내 이벤트 기반 Lambda 호출 가능
  • 예: 신규 사용자 INSERT → Lambda → SES로 환영 이메일 발송
  • DB 인스턴스가 Lambda에 아웃바운드 접근 권한 필요 (Public / NAT GW / VPC Endpoint 중 하나)
  • DB Instance에 Lambda 호출 권한 필요 (Lambda Resource-based Policy + IAM Policy)

RDS Event Notifications#

  • DB 인스턴스 자체의 이벤트 알림 (데이터 변경 아님)
  • 이벤트 카테고리: DB Instance, Snapshot, Parameter Group, Security Group, RDS Proxy, Custom Engine Version
  • Near real-time (최대 5분 지연)
  • SNS 또는 EventBridge로 알림 전송

CloudFront Functions vs. Lambda@Edge#

Edge에서 코드를 실행하여 CloudFront 요청/응답을 동적으로 처리.

항목CloudFront FunctionsLambda@Edge
런타임JavaScript만Node.js, Python
처리량수백만 req/s수천 req/s
최대 실행 시간< 1ms5~10초
메모리2 MB128 MB ~ 10 GB
패키지 크기10 KB1 MB ~ 50 MB
트리거Viewer Req/ResViewer/Origin Req/Res (4가지)
네트워크/파일 접근
요청 Body 접근
가격더 저렴 (Free Tier 있음)Free Tier 없음
코드 작성 위치CloudFront 내us-east-1 리전

CloudFront Functions Use Cases: Cache Key 정규화, Header 조작, URL 리다이렉트, JWT 인증 Lambda@Edge Use Cases: 복잡한 로직, 외부 API 호출, 파일시스템 접근, 3rd Party 라이브러리


Amazon DynamoDB#

특징#

  • NoSQL, Serverless, 완전 관리형, Multi-AZ 복제
  • 초당 수백만 req, 수조 개 행, 수백 TB 스토리지
  • Single-digit millisecond 지연 시간
  • IAM 통합 보안, 자동 스케일링
  • Standard / Infrequent Access (IA) Table Class

기본 구조#

항목내용
Primary Key생성 시 결정 (변경 불가)
Item 최대 크기400 KB
Attribute언제든 추가 가능, null 허용 → Schema 유연성
지원 타입Scalar(String, Number, Binary, Boolean, Null), Document(List, Map), Set

Read/Write Capacity Modes#

항목Provisioned ModeOn-Demand Mode
용량 설정RCU/WCU 미리 지정자동
스케일링Auto-scaling 가능자동
비용프로비저닝 용량 과금실제 사용량 과금 (더 비쌈)
적합 워크로드예측 가능한 트래픽예측 불가, 급격한 Spike

DynamoDB Accelerator (DAX)#

  • DynamoDB를 위한 완전 관리형 인메모리 캐시
  • Microsecond 지연 시간 (캐시된 데이터)
  • 기존 DynamoDB API와 호환 → 애플리케이션 코드 변경 불필요
  • 기본 TTL: 5분

DAX vs. ElastiCache:

DAXElastiCache
개별 Object, Query/Scan 캐시집계 결과(Aggregation) 캐시
DynamoDB 전용범용 캐시

DynamoDB Streams#

DynamoDB 테이블의 Item 변경(CUD) 이벤트 스트림.

항목DynamoDB StreamsKinesis Data Streams
보존 기간24시간최대 365일
Consumer 수제한적많음
처리 방법Lambda Triggers, KCL AdapterLambda, Firehose, Analytics, EMR 등

Use Cases: 실시간 반응, 크로스 리전 복제, Lambda 트리거

DynamoDB Global Tables#

  • Active-Active 복제 (모든 리전에서 Read/Write 가능)
  • 다중 리전에서 저지연 접근
  • DynamoDB Streams 활성화 필수

DynamoDB TTL (Time To Live)#

  • 만료 Timestamp 기반 자동 Item 삭제
  • Use Cases: 세션 데이터, 규정 준수, 오래된 데이터 정리

DynamoDB 백업#

방식내용
PITR (자동 백업)최대 35일, 복원 시 새 테이블 생성
On-Demand Backup명시적 삭제 전까지 유지, 성능 영향 없음, AWS Backup으로 Cross-Region 가능

DynamoDB ↔ S3 연동#

항목Export to S3Import from S3
전제 조건PITR 활성화 필수-
포맷DynamoDB JSON / IONCSV / DynamoDB JSON / ION
용량 소비Read Capacity 미사용Write Capacity 미사용
결과기존 테이블 유지새 테이블 생성

Amazon API Gateway#

항목내용
인프라 관리불필요 (Lambda + API Gateway = 완전 Serverless)
주요 기능API 버저닝, 환경 관리(dev/prod), 인증/인가, Rate Limiting, API Key, 캐싱, SDK 생성
지원 프로토콜REST, HTTP, WebSocket

API Gateway Endpoint Types#

유형설명특징
Edge-Optimized (기본)CloudFront Edge Location 경유글로벌 클라이언트, API는 단일 리전
Regional동일 리전 클라이언트용수동으로 CloudFront 결합 가능
PrivateVPC 내부에서만 접근Interface VPC Endpoint (ENI) + Resource Policy 필요

API Gateway 인증#

방법Use Case
IAM Roles내부 애플리케이션
Cognito외부 사용자 (모바일 앱 등)
Custom Authorizer자체 인증 로직 (Lambda 기반)

ACM (AWS Certificate Manager) 연동:

  • Edge-Optimized: 인증서는 us-east-1에 있어야 함
  • Regional: 인증서는 API Gateway와 같은 리전에 있어야 함
  • Route 53에 CNAME 또는 A-alias 레코드 설정 필요

AWS Step Functions#

  • Lambda 함수들을 시각적 워크플로우로 오케스트레이션
  • 기능: 순차/병렬 실행, 조건 분기, 타임아웃, 에러 핸들링
  • EC2, ECS, 온프레미스, API Gateway, SQS, DynamoDB 등과 통합
  • Human Approval (사람의 승인 단계) 구현 가능
  • Use Cases: 주문 처리, 데이터 파이프라인, 웹 애플리케이션 워크플로우

Amazon Cognito#

목적#

외부 사용자(웹/모바일 앱 사용자)에게 AWS 리소스에 대한 Identity 부여

📌 Cognito vs. IAM: 수백 명의 외부 사용자, 모바일 사용자, SAML 인증 → Cognito

Cognito User Pools (CUP)#

  • 앱 사용자를 위한 Serverless 사용자 DB
  • 기능: 이메일/비밀번호 로그인, 비밀번호 재설정, 이메일/전화 인증, MFA
  • Federated Identity: Facebook, Google, SAML 계정으로 로그인
  • API Gateway 및 ALB와 통합

Cognito Identity Pools (Federated Identities)#

  • 사용자에게 임시 AWS 자격증명(Temporary AWS Credentials) 발급
  • AWS 서비스에 직접 접근 가능 (S3, DynamoDB 등)
  • 사용자 소스: Cognito User Pools, 3rd party 로그인
  • IAM Policy를 Cognito에서 정의 (user_id 기반 세밀한 권한 제어 가능)
  • 인증/미인증 사용자별 기본 IAM Role 설정 가능

CUP vs. Identity Pools#

항목User PoolsIdentity Pools
목적로그인/인증AWS 리소스 접근 권한 부여
결과물JWT Token임시 AWS 자격증명
통합API Gateway, ALBS3, DynamoDB 직접 접근

📌 시험 자주 출제 포인트#

포인트내용
Lambda 최대 실행 시간15분 (900초)
Lambda 메모리 범위128 MB ~ 10 GB
Lambda 기본 동시 실행 한도1,000개
Throttle (Sync)429 ThrottleError
Throttle (Async)자동 재시도 최대 6시간, 지수 백오프
Cold Start 해결Provisioned Concurrency
SnapStart 지원 런타임Java, Python, .NET
Lambda + RDS ProxyLambda는 VPC 내 배포 필수
CloudFront Functions 실행 시간< 1ms
Lambda@Edge 실행 시간5~10초
CloudFront Functions 트리거Viewer Req/Res만
Lambda@Edge 트리거Viewer/Origin Req/Res (4가지)
DynamoDB Item 최대 크기400 KB
DAX 지연 시간Microsecond
DAX 기본 TTL5분
DAX vs ElastiCacheDAX: 개별 Object / ElastiCache: 집계 결과
DynamoDB Streams 보존24시간
Global Tables 전제DynamoDB Streams 활성화 필수
Global Tables 방식Active-Active
DynamoDB PITR 최대35일
Export to S3 전제PITR 활성화 필수
Import from S3 결과새 테이블 생성
API Gateway Edge-Optimized ACMus-east-1 인증서
Cognito User Pools 통합API Gateway + ALB
Cognito Identity Pools 결과물임시 AWS 자격증명