Lambda — Function as a Service
Lambda — Function as a Service
서버를 띄우지 않고 함수 단위로 코드를 실행하는 모델이 있습니다. 이벤트가 들어오면 그 순간 컴퓨트가 깨어나 함수 한 번을 실행하고, 끝나면 사라집니다. AWS 의 그 자리가 Lambda 입니다 — 서버리스라는 단어가 대중화되는 데 큰 역할을 했습니다.
1. Lambda 에 대한 이야기
| 시기 | 사건 |
|---|---|
| 2014 | Lambda GA. |
| 2015 | API Gateway 통합 · VPC 접근. |
| 2019 | Provisioned Concurrency. |
| 2020 | Container Image 지원 (10 GB). |
| 2021 | Graviton2 (ARM). |
| 2022 | Function URL · SnapStart (Java). |
Lambda 의 단위:
- Function — 핸들러 + 런타임 + 환경 변수 + 메모리.
- Trigger — 함수를 호출하는 이벤트 소스.
- Layer — 여러 함수가 공유하는 의존성 묶음.
- Execution Role — 함수가 다른 AWS 서비스를 호출할 때 IAM Role.
2. 이벤트 트리거
| 소스 | 예 |
|---|---|
| API Gateway · ALB · Function URL | HTTP 요청 |
| S3 | 객체 업로드 · 삭제 |
| DynamoDB Stream · Kinesis | 테이블 변경 · 스트림 |
| SQS · SNS | 큐 메시지 · 알림 |
| EventBridge | 스케줄 · 사용자 이벤트 |
| Cognito · IoT · CloudWatch Logs | 신원 · 디바이스 · 로그 |
같은 함수가 여러 트리거에 연결될 수 있습니다. 트리거에 따라 동기/비동기/스트림 모드가 갈립니다.
3. 동시성
기본 한도는 계정·리전당 1000 (요청으로 늘림). 함수별로 reserved concurrency 또는 provisioned concurrency 로 조절.
요청 → Lambda 가 실행 컨테이너 풀 확인 → 가용 컨테이너 있으면 재사용
→ 없으면 새로 만들어 콜드 스타트
4. 콜드 스타트
새 컨테이너를 만들 때 일어나는 지연. 런타임·번들 크기·언어에 따라 수백 ms ~ 몇 초.
| 런타임 | 콜드 스타트 경향 |
|---|---|
| Node.js · Python | 비교적 짧음 (수백 ms) |
| Go · Rust (커스텀) | 짧음 |
| Java · .NET | 긴 편 (수 초) |
대응:
- Provisioned Concurrency — 미리 N 개의 컨테이너를 데워 둠. 추가 비용.
- SnapStart (Java) — 초기화 후 스냅샷으로 부팅 단축.
- 번들 슬림화 — 의존성 줄이기.
- 자주 호출 — 5 ~ 15 분 이내 다시 호출되면 같은 컨테이너 재사용.
5. 메모리 · CPU
Lambda 는 메모리만 설정하면 CPU 가 비례적으로 할당됩니다. 128 MB ~ 10240 MB 범위. 메모리를 늘리면 CPU 도 늘어 비용·속도가 함께 변합니다.
같은 비용으로 더 빨라지는 자리가 있습니다 (메모리 1024 MB 가 256 MB 보다 더 빠르고 더 싼 사례 보고).
6. Layer · Container Image
Layer — 여러 함수가 공유하는 의존성 · 런타임. ZIP 으로 올려 함수에 부착. 함수당 최대 5 개.
Container Image — OCI 이미지를 ECR 에 올려 Lambda 함수로 실행. 최대 10 GB. 일반 ZIP 은 250 MB 한계라 큰 의존성 · 바이너리가 필요한 자리.
FROM public.ecr.aws/lambda/python:3.12
COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip install -r requirements.txt
CMD ["app.handler"]
Graviton2 (ARM) — 같은 메모리에서 가격이 약 20% 낮다는 보고. 호환 의존성 점검 필요.
7. HTTP 진입
- API Gateway — 매니지드 HTTP API 게이트웨이. REST API 와 HTTP API 두 종류. HTTP API 는 후발 (2020) — 비용 · 지연이 더 낮음.
- ALB — Application Load Balancer 도 Lambda 를 target 으로.
- Function URL — 함수에 직접 부여하는 HTTPS 엔드포인트 (2022). API Gateway 없이 HTTP 호출.
8. 다른 FaaS 비교
| 플랫폼 | 모델 | 강점 | 한계 |
|---|---|---|---|
| Lambda (2014) | FaaS | 풍부한 통합 · IAM · VPC | 콜드 스타트 (런타임별 차이) |
| Cloudflare Workers (2017) | V8 isolate | 매우 짧은 콜드 스타트 (수 ms) | 런타임 제약 (V8 only) |
| Vercel Functions (2018) | Node + Edge | Next.js 통합 | Vercel 종속 |
| Cloud Run (2019) | 컨테이너 기반 | 자유로운 런타임 · 짧은 콜드 스타트 | GCP 종속 |
| Azure Functions (2016) | FaaS | .NET 통합 · Durable Functions | 콜드 스타트 |
| Fly Machines (2022) | microVM | 빠른 부팅 · 컨테이너 자유도 | FaaS 라기보다 microVM |
Cloud Run 은 컨테이너 단위 실행, 콜드 스타트가 작고 런타임 제약이 없어 Lambda 와 다른 결의 선택지로 거론됩니다. Cloudflare Workers 는 V8 isolate 기반이라 거의 콜드 스타트가 없는 대신 Node 호환에 제약이 있습니다.
9. Hello World (Python)
# handler.py
def handler(event, context):
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": '{"hello":"world"}',
}
zip -j fn.zip handler.py
aws lambda create-function \
--function-name hello \
--runtime python3.12 \
--role arn:aws:iam::123:role/lambda-exec \
--handler handler.handler \
--zip-file fileb://fn.zip
10. 가격 구조
- 요청 수 — 100 만 호출당 단가.
- GB-초 — 메모리 × 실행 시간 (ms 단위, 최소 1 ms).
- 데이터 전송 — 일반 AWS 트래픽 규칙.
매월 무료 티어 (100 만 요청 + 40 만 GB-초). 작은 사이드 프로젝트는 무료 안에 들어가는 자리가 흔합니다.
11. 어울리는 자리 · 어울리지 않는 자리
어울리는:
- 짧은 백엔드 작업 (몇 초 미만).
- S3 업로드 후 처리.
- 스트림 처리 (SQS · Kinesis).
- 스케줄 작업 (EventBridge).
- 웹훅 수신.
어울리지 않는:
- 항상 켜져 있어야 하는 long-running.
- 큰 메모리·GPU 워크로드.
- WebSocket 서버.
- 빠른 콜드 스타트 필수인 사용자 대면 (Cloudflare Workers · Cloud Run 검토).
12. 자주 걸리는 자리
VPC 안에서의 콜드 스타트 — VPC 부착 함수는 ENI 생성 때문에 더 긴 콜드 스타트가 보고됐습니다. 2019 후 개선됐지만 여전히 차이가 있습니다.
15 분 한도 — 한 번 실행 최대 15 분. 그 이상은 Step Functions · Fargate · ECS 로 분할.
payload 6 MB / 응답 6 MB 한도 — 큰 파일은 S3 경유.
임시 디스크 /tmp 512 MB ~ 10 GB — 큰 파일 처리 시 한도 점검.
로그 비용 — CloudWatch Logs 가 의외로 비싸집니다. 출력 볼륨 + 보존 기간 점검.
DB 연결 폭주 — 매 호출마다 DB 연결을 만들면 풀이 고갈. RDS Proxy · 외부 풀러 · serverless DB.
idempotency — 비동기 트리거 (SQS · S3) 는 같은 메시지를 두 번 보낼 수 있습니다. 멱등 처리 필요.
하고픈 말
Lambda 는 짧은 이벤트 처리에는 거의 무료에 가까운 자리이지만 long-running · DB 풀 의존이 큰 워크로드에는 부적합합니다. 콜드 스타트 + 15 분 한도 + payload 한도 셋이 기본 제약 — 이 안에 들어맞으면 매우 단순한 답이 됩니다.
Next
- route53
- load-balancers
Lambda 사용자 가이드 · Lambda 가격 · SnapStart · Cloudflare Workers · Cloud Run · Vercel Functions · Azure Functions · SAM · CDK 를 참고합니다.