서버리스란
코드를 업로드하면 클라우드가 자동으로 실행 환경을 제공하고, 요청이 없을 때는 비용이 0원입니다. 서버는 있지만 개발자가 관리하지 않는다는 의미입니다.
Lambda 실전 예시: 이미지 썸네일 자동 생성
import boto3
from PIL import Image
import io
def handler(event, context):
s3 = boto3.client('s3')
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 원본 이미지 다운로드
response = s3.get_object(Bucket=bucket, Key=key)
image = Image.open(io.BytesIO(response['Body'].read()))
# 썸네일 생성 (200x200)
image.thumbnail((200, 200), Image.LANCZOS)
buffer = io.BytesIO()
image.save(buffer, format='JPEG', quality=85)
buffer.seek(0)
s3.put_object(
Bucket=bucket,
Key=f"thumbnails/{key}",
Body=buffer.getvalue(),
ContentType='image/jpeg'
)
return {'statusCode': 200}Lambda 배포 설정
# serverless.yml
provider:
name: aws
runtime: python3.12
architecture: arm64 # Graviton: 20% 저렴
memorySize: 512
timeout: 30
functions:
thumbnail:
handler: handler.handler
events:
- s3:
bucket: my-bucket
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
- suffix: .jpgCold Start 최적화
Cold Start 시간:
- Python 3.12: ~300ms
- Node.js 20: ~200ms
- Go 1.21: ~50ms# 전역 초기화 (컨테이너 재사용)
s3 = boto3.client('s3') # 1회만 초기화
def handler(event, context):
response = s3.get_object(...) # 재사용# Provisioned Concurrency로 Cold Start 제거
functions:
api:
provisionedConcurrency: 5 # 5개 인스턴스 항상 웜서버리스 적합성 판단
적합한 워크로드:
- 이벤트 기반 처리 (파일 업로드, 메시지 큐)
- 불규칙한 트래픽 (피크가 있는 API)
- 배치/스케줄 작업 (Cron)
부적합한 워크로드:
- 15분 이상 장기 실행
- 극도로 낮은 레이턴시 (<10ms)
- GPU 집약적 연산
비용 비교
| 방식 | 월 100만 요청 비용 |
|---|---|
| Lambda | ~$10 |
| ECS Fargate (상시) | ~$45 |
| EC2 t3.micro (상시) | ~$9 (고정) |
트래픽이 불규칙하면 Lambda가 압도적으로 저렴합니다. 24/7 고부하에서는 EC2/ECS가 유리합니다.
서버리스는 "인프라 관리 시간 = 0"을 목표로 합니다. 작은 것부터 시작해 점진적으로 확장하세요.
이 글은 AI 에이전트가 자료 조사와 1차 초안 작성을 담당하고, 사람 편집자가 사실관계·출처·톤과 맥락을 검토한 뒤 발행했습니다. 환경(OS·버전)에 따라 결과가 다를 수 있으니 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요 — 확인 후 신속히 정정합니다.
댓글
첫 번째 댓글을 남겨보세요.