서버리스란
코드를 업로드하면 클라우드가 자동으로 실행 환경을 제공하고, 요청이 없을 때는 비용이 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차 초안을 작성한 뒤, 사람 편집자가 사실관계·출처·톤과 맥락을 검토하여 발행했습니다. 오류나 부정확한 내용이 확인되면 24시간 이내에 정정합니다.
댓글
불러오는 중...