1. Serverless 개요
Serverless란?
개발자가 서버를 관리하지 않는 새로운 패러다임
코드(함수)만 배포
FaaS (Function as a Service)
서버가 없다는 뜻이 아님 → 관리/프로비저닝/보이지 않을 뿐
AWS Serverless 서비스
서비스 용도 AWS Lambda 함수 실행 DynamoDB NoSQL DB API Gateway REST API S3 스토리지 SNS & SQS 메시징 Kinesis Data Firehose 스트리밍 Aurora Serverless 관계형 DB Step Functions 워크플로우 오케스트레이션 Fargate 서버리스 컨테이너 Cognito 인증
2. AWS Lambda vs EC2
항목 EC2 Lambda 서버 직접 관리 관리 불필요 실행 지속 실행 온디맨드 실행 시간 무제한 최대 15분 스케일링 수동 개입 자동 리소스 RAM/CPU 제한 RAM 최대 10GB
3. Lambda 장점
가격
항목 무료 티어 초과 시 요청 수 1,000,000건/월 $0.20/1M 요청 컴퓨팅 시간 400,000 GB-초/월 $1.00/600,000 GB-초
💡 매우 저렴 → Lambda 인기 비결!
기타 장점
AWS 서비스와 완전 통합
다양한 언어 지원
CloudWatch로 쉬운 모니터링
RAM 증가 → CPU/네트워크도 향상
4. 지원 언어 & 통합
지원 언어
언어 비고 Node.js (JavaScript) - Python - Java - C# (.NET Core) / PowerShell - Ruby - Custom Runtime API Rust, Go 등 Container Image Lambda Runtime API 구현 필수
⚠️ 임의 Docker 이미지는 ECS/Fargate 권장
주요 통합 서비스
S3, DynamoDB, Kinesis, SNS, SQS
API Gateway, CloudFront (Lambda@Edge)
CloudWatch Events/EventBridge, Cognito
CloudWatch Logs
5. Lambda 사용 예시
예시 1: S3 썸네일 생성
S3 (이미지 업로드 ) → Lambda ( 썸네일 생성 ) → S3 ( 썸네일 저장 )
→ DynamoDB (메타데이터)
예시 2: Serverless CRON Job
EventBridge (매 1시간 ) → Lambda ( 작업 수행 )
6. Lambda 호출 유형
6.1 동기 호출 (Synchronous)
Client → SDK/CLI → Lambda → Response (즉시 반환 )
Client → API Gateway → Lambda → Response
특징 설명 응답 즉시 반환 에러 처리 클라이언트 측 (재시도, Exponential Backoff)
동기 호출 서비스 :
User Invoked : ALB, API Gateway, CloudFront (Lambda@Edge), S3 Batch
Service Invoked : Cognito, Step Functions
Other : Lex, Alexa, Kinesis Data Firehose
6.2 비동기 호출 (Asynchronous)
S3 (새 파일 ) → Event Queue → Lambda → 처리
│
└─→ 실패 시 재시도 (최대 3회 )
└─→ DLQ (SNS/SQS)
특징 설명 재시도 3회 (1분 → 2분 대기)멱등성 처리 로직은 idempotent 해야 함 DLQ SNS 또는 SQS로 실패 처리 장점 결과 대기 불필요 → 대량 처리에 유용
비동기 호출 서비스 :
S3, SNS
CloudWatch Events / EventBridge
CodeCommit, CodePipeline
CloudWatch Logs, SES, CloudFormation
AWS Config, IoT
6.3 Event Source Mapping
Kinesis/DynamoDB Streams/SQS
│
Event Source Mapping (Poll)
│
▼
Lambda (배치로 동기 호출 )
특징 설명 대상 Kinesis, DynamoDB Streams, SQS 방식 Polling (Lambda가 소스에서 레코드 가져옴)호출 동기 (배치 단위)
7. ALB + Lambda 통합
구조
Client → ALB → Target Group → Lambda
( HTTP→JSON ) ( JSON→HTTP )
Lambda를 Target Group 에 등록
ALB가 HTTP를 JSON으로 변환하여 Lambda 호출
Lambda 응답을 HTTP로 변환하여 클라이언트에 반환
Multi-Value Headers
URL: http://example.com/path?name=foo &name = bar
→ Lambda Event:
{
"queryStringParameters" : {
"name" : [ "foo" , "bar"]
}
}
8. S3 Events → Lambda
S3 Event 유형
S3:ObjectCreated
S3:ObjectRemoved
S3:ObjectRestore
S3:Replication
특징
항목 설명 필터링 객체 이름 필터 가능 (*.jpg) 지연 보통 초 단위, 간혹 1분 이상 중복 비버저닝 버킷에서 동시 쓰기 시 이벤트 누락 가능
💡 모든 쓰기에 이벤트 보장하려면 버전 관리 활성화
메타데이터 동기화 패턴
S3 (새 파일 ) → Lambda → DynamoDB/RDS ( 메타데이터 저장 )
9. Streams & Lambda (Kinesis/DynamoDB)
특징
항목 설명 Iterator Shard당 1개 생성 순서 Partition Key 기준 순서 보장 데이터 스트림에서 제거 안 됨 (다른 Consumer도 읽기 가능) 병렬 Shard당 최대 10개 배치 동시 처리
에러 처리
기본 동작 설명 재처리 전체 배치 재처리 (성공 또는 만료까지) Shard 일시정지 순서 보장을 위해 에러 해결까지 중지
설정 옵션 :
오래된 이벤트 폐기
재시도 횟수 제한
에러 시 배치 분할 (Lambda 타임아웃 대응)
폐기된 이벤트 → Destination 으로 전송
10. SQS & Lambda
특징
항목 설명 Polling Long Polling 배치 크기 1~10 메시지 Visibility Timeout Lambda 타임아웃의 6배 권장 DLQ SQS Queue에 설정 (Lambda DLQ는 비동기 전용)
스케일링
Queue 유형 스케일링 Standard 분당 60개 인스턴스 추가, 최대 1000개 동시 배치 FIFO 활성 Message Group 수만큼 스케일링
11. Lambda Event & Context Objects
Event Object
JSON 형식 문서
호출 서비스의 데이터 포함
예: 입력 인자, 서비스별 인자
Context Object
호출, 함수, 런타임 환경 정보
예: aws_request_id, function_name, memory_limit_in_mb
def lambda_handler (event, context):
print (event) # 입력 데이터
print (context.aws_request_id) # 요청 ID
print (context.function_name) # 함수 이름
12. Lambda Destinations
비동기 호출 Destinations
결과 대상 성공 SQS, SNS, Lambda, EventBridge 실패 SQS, SNS, Lambda, EventBridge
💡 AWS는 DLQ보다 Destinations 권장 (둘 다 사용 가능)
Event Source Mapping Destinations
13. Lambda IAM
Execution Role (실행 역할)
관리형 정책 용도 AWSLambdaBasicExecutionRoleCloudWatch Logs 업로드 AWSLambdaKinesisExecutionRoleKinesis 읽기 AWSLambdaDynamoDBExecutionRoleDynamoDB Streams 읽기 AWSLambdaSQSQueueExecutionRoleSQS 읽기 AWSLambdaVPCAccessExecutionRoleVPC 배포 AWSXRayDaemonWriteAccessX-Ray 추적
💡 함수당 하나의 Execution Role 권장
Resource-based Policy
다른 계정/서비스가 Lambda를 호출할 수 있도록 허용
S3 버킷 정책과 유사
14. Lambda 환경 변수 & 모니터링
환경 변수
Key/Value 쌍 (String)
코드 수정 없이 동작 변경
KMS로 암호화 가능 (비밀 저장)
CloudWatch Logs
Lambda 실행 로그 저장
Execution Role에 CloudWatch 쓰기 권한 필요
CloudWatch Metrics
메트릭 설명 Invocations 호출 수 Duration 실행 시간 Concurrent Executions 동시 실행 수 Error count 에러 수 Throttles 스로틀링 수 Iterator Age Kinesis/DynamoDB 지연
X-Ray 추적
Lambda 콘솔에서 Active Tracing 활성화
X-Ray Daemon 자동 실행
AWSXRayDaemonWriteAccess 정책 필요
15. Edge Functions (CloudFront)
개요
CloudFront 배포에 연결하는 코드
사용자에게 가까운 위치에서 실행 → 지연시간 최소화
서버리스 , 전역 배포
CloudFront Functions vs Lambda@Edge
항목 CloudFront Functions Lambda@Edge 언어 JavaScript Node.js, Python 처리량 수백만 req/s 수천 req/s 트리거 Viewer Request/Response Viewer + Origin Request/Response 실행 시간 < 1ms 5~10초 메모리 2MB 128MB ~ 10GB 패키지 크기 10KB 1~50MB 네트워크/파일 접근 ❌ ✅ Request Body 접근 ❌ ✅ 비용 저렴 (1/6) 비쌈
사용 사례
CloudFront Functions :
Cache Key 정규화
헤더 조작
URL 리다이렉트
JWT 검증
Lambda@Edge :
긴 실행 시간 필요
외부 라이브러리 (AWS SDK 등)
네트워크 호출 필요
HTTP Body 접근 필요
16. Lambda in VPC
기본 동작
Lambda (기본) → AWS 소유 VPC에서 실행
│
├─→ Public Internet ✅
└─→ Private VPC (RDS, ElastiCache ) ❌
VPC 내 Lambda 배포
┌─────────────────── VPC ───────────────────┐
│ │
│ Private Subnet │
│ ┌─────────────────────────────────────┐ │
│ │ │ │
│ │ Lambda ── ( ENI ) ──→ RDS │ │
│ │ │ │
│ └─────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────┘
필요 설정:
• VPC ID
• Subnet IDs
• Security Group IDs
• AWSLambdaVPCAccessExecutionRole
VPC 내 Lambda → 인터넷 접근
┌─────────────────── VPC ───────────────────┐
│ │
│ Private Subnet Public Subnet │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Lambda │──────▶│ NAT Gateway │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ┌──────▼───────┐ │
│ │ IGW │ │
│ └──────┬───────┘ │
└──────────────────────────────────┼─────────┘
│
▼
Public Internet
• VPC 내 Lambda는 인터넷 접근 불가 (기본)
• Public Subnet에 배포해도 Public IP 없음
• Private Subnet + NAT Gateway 필요
• VPC Endpoint로 AWS 서비스 접근 (NAT 없이 )
💡 CloudWatch Logs는 VPC Endpoint/NAT 없이도 동작
17. Lambda 구성
RAM & CPU
항목 값 RAM 128MB ~ 10GB (1MB 단위) vCPU RAM에 비례 1 vCPU 1,792MB RAM최대 vCPU 6개 (멀티스레딩 필요)
💡 CPU 집약적 작업 → RAM 증가
Timeout
/tmp 디렉토리
임시 파일 저장 공간
최대 10GB
Execution Context 동결 시 유지 (캐시 역할)
영구 저장 → S3 사용
암호화 필요 시 → KMS Data Keys 직접 생성
18. Execution Context
개념
Lambda 코드의 외부 의존성을 초기화 하는 임시 런타임 환경
다음 호출에서 재사용 가능 → 초기화 시간 절약
Best Practice
# ❌ BAD - 매 호출마다 연결 생성
def lambda_handler (event, context):
db = connect_to_database()
# ...
# ✅ GOOD - 핸들러 외부에서 연결 생성 (재사용)
db = connect_to_database()
def lambda_handler (event, context):
# db 재사용
# ...
19. Lambda Layers
용도
Custom Runtime (C++, Rust)
의존성 외부화 (재사용)
장점
Without Layers:
┌─────────────────────────────┐
│ function.py │
│ + heavy_library (30MB) │
│ = 30.02MB 패키지 │
└─────────────────────────────┘
With Layers:
┌───────────────────┐ ┌─────────────────────┐
│ function.py (20KB)│───▶│ Layer: library ( 30MB )│
└───────────────────┘ └─────────────────────┘
↑
여러 함수에서 공유
제한
함수당 최대 5개 Layer
총 250MB (압축 해제 후)
20. Lambda Storage 옵션 비교
옵션 최대 크기 지속성 유형 공유 /tmp 10GB 임시 파일 시스템 함수 내 Layers 250MB 영구 아카이브 함수 간 ✅ S3 무제한 영구 객체 전역 ✅ EFS 무제한 영구 파일 시스템 전역 ✅
EFS 마운트
VPC 내 Lambda에서만 사용 가능
EFS Access Point 필요
⚠️ 연결 제한 주의 (함수 인스턴스 1개 = 1 연결)
21. Lambda Concurrency (동시성)
기본 제한
Reserved Concurrency (예약 동시성)
특정 함수에 동시성 제한/보장
다른 함수가 모든 동시성 소진 방지
Throttling
호출 유형 Throttle 동작 동기 429 ThrottleError 반환 비동기 자동 재시도 → DLQ
Concurrency 문제 예시
ALB/API Gateway (많은 사용자 ) ──┐
│
SDK/CLI (소수 사용자 ) ──────────┼──▶ Lambda ( 1000 동시 실행 )
│
THROTTLE!
→ Reserved Concurrency 로 함수별 제한 설정
22. Cold Start & Provisioned Concurrency
Cold Start
새 인스턴스 생성 시 초기화 시간 발생
코드, 의존성, SDK 로드
첫 요청 지연 발생
Provisioned Concurrency
함수 호출 전에 동시성 미리 할당
Cold Start 완전 방지
Application Auto Scaling으로 관리 가능
┌─────────────────────────────────────────┐
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Unreserved │ │ Reserved │ │
│ │ Concurrency │ │ Concurrency │ │
│ │ │ │ │ │
│ │ │ │ ┌─────────┐ │ │
│ │ │ │ │Provisioned│ │
│ │ │ │ │Concurrency│ │
│ │ │ │ └─────────┘ │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ Account Concurrency Limit │
└─────────────────────────────────────────┘
23. Lambda 배포
의존성 포함
언어 방법 Node.js npm + node_modules/Python pip --targetJava .jar 파일 포함
업로드 방식
크기 방법 < 50MB Lambda에 직접 업로드 ≥ 50MB S3에 업로드 후 참조
💡 AWS SDK는 기본 포함 (별도 패키징 불필요)
Container Image
# Lambda Runtime API 구현 이미지 사용
FROM amazon/aws-lambda-nodejs:12
COPY app.js package*.json ./
RUN npm install
CMD [ "app.lambdaHandler" ]
항목 값 최대 크기 10GB 저장소 ECR 테스트 Lambda Runtime Interface Emulator
CloudFormation 배포
Inline (간단한 함수):
Code :
ZipFile : |
def handler(event, context):
return "Hello"
S3 (의존성 포함):
Code :
S3Bucket : my-bucket
S3Key : code.zip
S3ObjectVersion : abc123 # 버전 관리 시
⚠️ S3 코드 업데이트 시 S3ObjectVersion 변경 필수 (아니면 CloudFormation이 업데이트 안 함)
24. Lambda Versions & Aliases
Versions
$LATEST ( mutable ) ← 개발 중
│
├─→ V1 (immutable)
├─→ V2 (immutable)
└─→ V3 (immutable)
항목 설명 $LATEST 개발 버전 (가변) V1, V2... 발행된 버전 (불변 ) ARN 버전별 고유 ARN
Aliases
$LATEST ← DEV Alias
V2 ← TEST Alias
V1 (95%) + V2 ( 5% ) ← PROD Alias ( Canary )
항목 설명 용도 버전에 대한 포인터 가변성 가변 (버전은 불변)Canary 가중치로 트래픽 분할 제한 Alias는 다른 Alias 참조 불가
25. Lambda & CodeDeploy
배포 전략
전략 설명 Linear N분마다 X% 증가 Canary X%로 시작 → 일정 시간 후 100% AllAtOnce 즉시 100%
예시 :
Linear10PercentEvery3Minutes
Canary10Percent5Minutes
AppSpec.yml
version : 0.0
Resources :
- MyFunction :
Type : AWS::Lambda::Function
Properties :
Name : MyFunction
Alias : PROD
CurrentVersion : 1
TargetVersion : 2
Pre/Post Traffic Hooks
트래픽 전환 전후 Lambda 함수로 헬스 체크
26. Lambda Function URL
개요
Lambda 전용 HTTP(S) 엔드포인트
형식: https://<url-id>.lambda-url.<region>.on.aws
Public Internet으로만 접근
PrivateLink 미지원
보안
AuthType 설명 NONE 공개 접근 (Resource Policy로 제어) AWS_IAM IAM 인증 (lambda:InvokeFunctionUrl 필요)
Cross-Account 접근 :
Same Account: Identity-based OR Resource-based Allow
Cross Account: Identity-based AND Resource-based Allow
CORS
27. Lambda Limits (리전당)
실행 제한
항목 값 메모리 128MB ~ 10GB 실행 시간 최대 900초 (15분) 환경 변수 4KB /tmp 512MB ~ 10GB 동시 실행 1000 (증가 요청 가능)
배포 제한
항목 값 압축 패키지 50MB 압축 해제 후 250MB 환경 변수 4KB
28. Lambda Best Practices
핸들러 외부에서 초기화
# ✅ 핸들러 외부에서 초기화 (재사용)
import boto3
dynamodb = boto3.resource( 'dynamodb' )
table = dynamodb.Table( 'MyTable' )
def lambda_handler (event, context):
# table 재사용
return table.get_item( ... )
환경 변수 활용
DB 연결 문자열, S3 버킷 이름
비밀번호 → KMS 암호화
기타
배포 패키지 최소화
Layers 활용
Lambda Limits 숙지
재귀 호출 금지 (Lambda가 자기 자신 호출 ❌)
핵심 요약
호출 유형
유형 서비스 특징 동기 ALB, API Gateway, SDK 즉시 응답 비동기 S3, SNS, EventBridge 재시도 3회, DLQ Event Source Mapping Kinesis, DynamoDB, SQS Polling, 배치
VPC & 네트워킹
상황 설정 Private 리소스 접근 VPC 배포 인터넷 접근 NAT Gateway AWS 서비스 접근 VPC Endpoint
동시성
개념 설명 Reserved 함수별 동시성 제한/보장 Provisioned Cold Start 방지
Edge Functions
유형 용도 CloudFront Functions 간단한 Viewer 처리, 저렴 Lambda@Edge 복잡한 처리, Origin 접근