AWS DVA-C02 마스터 노트 시리즈 7편. Lambda 동시성과 Provisioned Concurrency, SAM 템플릿으로 인프라 코드 작성, Step Functions 상태 머신과 표준 vs 익스프레스 모드, AppSync GraphQL과 실시간 구독까지 — 서버리스 아키텍처의 자격증 핵심을 한 흐름으로.
이 글은 AWS DVA-C02 마스터 노트 시리즈의 일곱 번째 편입니다. 2편(컴퓨팅)에서 Lambda 기초를 잡았다면, 이번엔 그 위에 올라가는 서버리스 생태계 — Lambda 심화·SAM·Step Functions·AppSync.
Lambda 심화
동시성 (Concurrency)
| 종류 | 설명 |
|---|---|
| Reserved Concurrency | 함수에 동시성 예약 (다른 함수 영향 격리) |
| Provisioned Concurrency | 미리 워밍업 (Cold Start 회피) |
계정 한도 1000 동시 실행
├── Function A: Reserved 200 (격리)
├── Function B: Reserved 100
└── Unreserved Pool: 700 (나머지 함수 공유)
여기서 정말 중요한 시험 함정 — Reserved Concurrency = 0 으로 설정하면 함수가 호출되지 않게 차단(긴급 시).
Provisioned Concurrency 비용
미리 워밍한 만큼 시간당 과금. Cold Start 절대 없음 보장. 트래픽 예측 가능 + 빠른 응답 필수 자리.
환경 변수와 Secrets
환경 변수 (4KB 한도) — KMS 암호화 가능
SSM Parameter Store — 설정값
Secrets Manager — DB 비밀번호 등 자동 회전
여기서 시험 함정이 하나 있어요. DB 비밀번호는 Secrets Manager, 일반 설정은 Parameter Store. 자동 회전 필요면 Secrets Manager.
Lambda Layer
공통 라이브러리·런타임 분리. 함수당 최대 5 Layer.
Layer 1: NumPy·Pandas (Python ML)
Layer 2: 회사 공통 유틸
Layer 3: AWS SDK 신버전
→ 여러 Lambda에서 공유
별칭 (Alias) 과 버전
$LATEST → 최신 코드 (개발용)
v1, v2, v3 → 불변 버전
PROD alias → v3 가리킴 (운영)
DEV alias → $LATEST 가리킴
별칭 + 트래픽 분할 = Canary 배포.
PROD alias: v3 (90%) + v4 (10%) → 새 버전 점진 적용
Lambda@Edge / CloudFront Functions
CloudFront 엣지에서 코드 실행.
| 구분 | Lambda@Edge | CloudFront Functions |
|---|---|---|
| 실행 시간 | 5-30초 | 1ms |
| 메모리 | 128MB-10GB | 2MB |
| 런타임 | Node.js·Python | JavaScript |
| 사용 | 복잡 처리 | 간단 헤더 조작 |
Lambda 트리거 — VPC
Lambda는 기본 VPC 외부 실행. RDS·ElastiCache 같은 VPC 내부 서비스 호출 시 VPC 설정 필요.
여기서 시험 함정이 하나 있어요. VPC Lambda는 NAT Gateway 통해 인터넷 접근. Public Subnet에 직접 두면 X (NAT 통해야).
SAM — Serverless Application Model
CloudFormation의 서버리스용 단순 문법.
# template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31 # SAM 변환
Resources:
HelloFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: python3.11
Handler: app.lambda_handler
CodeUri: ./src
Events:
ApiEvent:
Type: Api
Properties:
Path: /hello
Method: get
SAM CLI
| 명령 | 용도 |
|---|---|
sam init |
템플릿 생성 |
sam build |
빌드·의존성 패키징 |
sam local invoke |
로컬 테스트 |
sam local start-api |
로컬 API Gateway |
sam deploy |
배포 |
sam logs |
CloudWatch 로그 |
SAM 정책 템플릿
미리 정의된 정책.
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref MyTable
- S3ReadPolicy:
BucketName: my-bucket
직접 IAM JSON 작성 안 하고 표준 권한 부여.
여기서 시험 함정이 하나 있어요. SAM은 결국 CloudFormation으로 변환되어 배포. 디버깅 시 CloudFormation 콘솔에서 확인.
Step Functions — 상태 머신
회사 비유 — 업무 플로우 차트. 여러 Lambda·서비스를 워크플로로 연결.
상태 (State)
| 상태 | 용도 |
|---|---|
| Task | Lambda·다른 서비스 호출 |
| Choice | 조건 분기 |
| Wait | 대기 |
| Parallel | 병렬 실행 |
| Map | 배열 반복 처리 |
| Pass | 데이터 전달만 |
| Succeed/Fail | 종료 |
Amazon States Language (ASL)
JSON으로 워크플로 정의.
{
"StartAt": "Validate",
"States": {
"Validate": {
"Type": "Task",
"Resource": "arn:aws:lambda:...:function:Validate",
"Next": "ProcessOrder"
},
"ProcessOrder": {
"Type": "Choice",
"Choices": [
{
"Variable": "$.amount",
"NumericGreaterThan": 1000,
"Next": "RequireApproval"
}
],
"Default": "AutoApprove"
},
"RequireApproval": { /* ... */ },
"AutoApprove": { "Type": "Succeed" }
}
}
표준 vs 익스프레스 모드
| 구분 | Standard | Express |
|---|---|---|
| 최대 실행 | 1년 | 5분 |
| 처리량 | 2,000/s | 100,000/s |
| 가격 | 상태 전환 단위 | 실행 단위 |
| 실행 이력 | 90일 | 짧음 (CloudWatch만) |
| 적합 | 장기 워크플로 | 짧은 고처리량 (IoT·실시간) |
여기서 정말 중요한 시험 함정 — Express는 5분 한도 입니다. 장기 작업은 Standard.
에러 처리
{
"Type": "Task",
"Retry": [{
"ErrorEquals": ["States.TaskFailed"],
"IntervalSeconds": 1,
"MaxAttempts": 3,
"BackoffRate": 2
}],
"Catch": [{
"ErrorEquals": ["States.ALL"],
"Next": "ErrorHandler"
}]
}
자동 재시도 + 에러 핸들러 분기.
Activities
워커 노드(EC2·외부 시스템)가 폴링하는 작업.
Step Functions → Activity (대기) ← 외부 워커가 가져감 → 결과 반환
장기 외부 처리에 사용.
AppSync — GraphQL
AWS의 GraphQL 서비스. 실시간 구독 지원.
특징
- GraphQL 쿼리·뮤테이션·구독
- DynamoDB·Lambda·HTTP·OpenSearch·Aurora 데이터 소스
- 실시간 동기화·오프라인 데이터
- WebSocket 기반 구독
인증
| 방식 | 설명 |
|---|---|
| API Key | 단순 |
| Cognito User Pool | 사용자별 |
| IAM | 서비스 간 |
| OIDC | OpenID 연동 |
| Lambda | 커스텀 |
Resolver
GraphQL 필드 → 데이터 소스 매핑.
type Post {
id: ID!
title: String!
}
# Resolver: Post 조회 → DynamoDB GetItem
실시간 구독
subscription onCreatePost {
onCreatePost {
id
title
}
}
새 데이터 도착 시 클라이언트에 자동 push.
Lambda·SAM·Step Functions·AppSync 비교
| 서비스 | 자리 |
|---|---|
| Lambda | 단일 함수 실행 |
| SAM | Lambda 인프라 코드 |
| Step Functions | 여러 Lambda 워크플로 |
| AppSync | GraphQL API + 실시간 |
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 7편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- Reserved Concurrency = 격리 / Provisioned Concurrency = Cold Start 회피
- Reserved=0 = 함수 차단
- Lambda 환경 변수 4KB / KMS 암호화 가능
- Secrets Manager = DB 비밀번호 (자동 회전) / Parameter Store = 일반 설정
- Lambda Layer = 공통 라이브러리, 함수당 5 Layer
- 별칭(Alias) + 트래픽 분할 = Canary 배포
- Lambda@Edge (5-30s) vs CloudFront Functions (1ms·2MB)
- VPC Lambda → NAT Gateway 통해 인터넷
- SAM = CloudFormation 서버리스 단순 문법
Transform: AWS::Serverless-2016-10-31sam build / local invoke / deploy / logs- 정책 템플릿 — DynamoDBCrudPolicy 등
- 결국 CloudFormation 변환·배포
- Step Functions = 상태 머신 워크플로
- 상태 — Task / Choice / Wait / Parallel / Map / Pass / Succeed
- ASL = Amazon States Language (JSON)
- Standard 1년 / Express 5분
- 처리량 Standard 2K/s / Express 100K/s
- 장기 = Standard / IoT 단기 고처리량 = Express
- Retry·Catch로 자동 재시도·에러 분기
- Activities = 외부 워커 폴링
- AppSync = GraphQL + 실시간 구독
- 데이터 소스 — DynamoDB / Lambda / HTTP / Aurora / OpenSearch
- 인증 — API Key / Cognito / IAM / OIDC / Lambda
- Resolver = 필드 → 데이터 소스 매핑
- 실시간 구독 = WebSocket
시리즈 다른 편
- 1편 — IAM
- 2편 — 컴퓨팅
- 3편 — 스토리지
- 4편 — 데이터베이스
- 5편 — 네트워킹
- 6편 — 메시징
- 7편 — 서버리스 (현재 글)
- 8편 — CI/CD
- 9편 — 모니터링
- 10편 — 보안·암호화
- 11편 — 컨테이너
- 12편 — 개발자 도구
공식 문서: AWS Lambda Developer Guide / SAM Developer Guide에서 더 깊이.
다음 글(8편)에서는 CI/CD — CodeCommit·CodeBuild·CodeDeploy·CodePipeline의 4단계 파이프라인, 배포 전략(Blue/Green·Canary·Linear)까지 풀어 갑니다.