# AWS Lambda (서버리스 컴퓨트 서비스) 백과사전 항목
AWS Lambda는 이벤트 기반으로 코드를 실행하는 서버리스(Serverless) 컴퓨트 서비스이다. 사용자는 인프라 프로비저닝이나 서버 관리에 신경 쓸 필요 없이 코드 핸들러(handler)만 작성하고 업로드하면 되며, Lambda가 자동으로 실행 환경을 관리하고 필요에 따라 수평적으로 확장한다.
---
## 개요
- 정의: 이벤트가 발생하면 코드가 실행되도록 트리거되는 관리형 런타임(runtime) 환경으로, 사용한 만큼 비용을 지불하는 모델이다.
- 핵심 특징
- 서버 관리 자동화: 인프라 프로비저닝, 패치, 확장성 관리가 Lambda의 책임이다.
- 이벤트 주도 실행: 파일 업로드(S3), 메시지 큐(SQS), API 엔드포인트(API Gateway) 등 다양한 이벤트 소스에서 트리거 가능.
- 자동 확장성: 동시성에 따라 필요한 수의 인스턴스가 자동으로 생성되어 처리한다.
- 다양한 런타임 지원: Python, Node.js, Java, Go, .NET(C#, PowerShell) 등 여러 런타임을 기본으로 제공.
- 비용 효율성: 사용한 실행 시간과 메모리 크기에 따라 요금이 산정된다.
---
## 핵심 용어
- Lambda function: 실행 단위가 되는 함수 정의체.
- Handler: Lambda가 이벤트를 받아 실행하는 진입점 함수.
- Runtime: 코드가 실행되는 런타임 환경(Python, Node.js, Java 등).
- Event: 함수가 반응하는 입력 데이터(예: S3 객체 생성 이벤트).
- Trigger(트리거): 이벤트 소스가 Lambda를 호출하는 방식.
- Invocation: Lambda 함수의 실행 인스턴스.
- Version & Alias: 특정 버전의 함수에 대한 고정된 이름/별칭.
- Layers: 함수에 공통 라이브러리나 코드 의존성을 추가하는 방법.
- Concurrency: 동시에 실행되는 Lambda 함수의 수.
- Cold start: 새로운 컨테이너 시작 시 초기 로딩 시간.
- Provisioned Concurrency: 사전 프로비저닝된 동시 실행 용량으로 cold start를 제거하는 기능.
- DLQ(Dead Letter Queue): 실패한 실행을 전달받아 보존하는 큐.
- IAM Role: Lambda가 AWS 리소스에 접근할 때의 권한 역할.
- VPC 연결(VPC): VPC와의 네트워크 연결 설정.
- Deployment package: ZIP 파일 또는 컨테이너 이미지 형태의 배포 단위.
- Environment variables: 런타임 구성 값을 주입하는 변수.
---
## 아키텍처
- 기본 구성 요소
- Event Source: Lambda를 트리거하는 외부/내부 시스템(S3, DynamoDB Streams, API Gateway, SNS/SQS, CloudWatch Events/EventBridge, Kinesis 등).
- Lambda Function: 실제 비즈니스 로직이 구현된 코드.
- Execution Role: Lambda가 다른 AWS 리소스에 접근할 수 있게 하는 IAM Role.
- Layer: 공용 라이브러리와 의존성 관리.
- CloudWatch: 로그(Log), 지표(Metric), 알람(Alarm) 관리.
- Optional: X-Ray 트레이싱으로 분산 트레이스 수집.
- 일반적 데이터 흐름
- 이벤트 소스가 트리거를 발생 → Lambda가 함수 핸들러를 실행 → 결과를 대상 서비스(S3, DynamoDB, API, SNS 등)로 전달 또는 응답 반환.
- 확장 및 관리 포인트
- 동시성 관리: 기본 동시성, Provisioned Concurrency, reserved concurrency 설정 가능.
- 배포 전략: 버전/별칭, 무중단 배포를 위한 Aliases, CI/CD 파이프라인과의 통합.
---
## 실행 모델과 운영 원리
- 실행 모델
- 이벤트 기반 비동기 실행: 이벤트 수신 시 인스턴스가 생성되고 함수가 실행된다.
- Cold vs Warm: 초기 실행은 콜드 스타트로 지연이 발생할 수 있고, Provisioned Concurrency를 통해 완화 가능.
- 런타임 제약
- 실행 시간 제한: 기본적으로 최대 실행 시간은 설정된 타임아웃으로 제한된다.
- 메모리 및 CPU: 할당된 메모리량에 따라 CPU 성능도 비례적으로 증가한다.
- 예외 처리 및 재시도
- 실패 시 재시도 정책은 이벤트 소스에 따라 다르다(예: SQS는 재시도, API Gateway는 응답 코드에 따라 처리).
- DLQ를 구성해 실패 이벤트를 보관하고 후속 처리 가능.
- 보안 및 네트워크
- IAM Role에 최소 권한 원칙 적용.
- VPC를 연결하면 비공개 서브넷에서 실행 가능하지만 네트워크 설정이 필요하고 대기 시간이 증가할 수 있다.
---
## 함수 작성 및 배포
- 함수 작성 언어
- Python, Node.js, Java, Go, .NET 등 Lambda가 공식 지원하는 런타임 활용.
- 핸들러 핸들링 예시
- Python 예시:
- 파일: lambda_function.py
- 핸들러: lambda_function.lambda_handler
- Node.js 예시:
- 파일: index.js
- 핸들러: exports.handler
- 배포 방법
- 배포 패키지: ZIP 파일 또는 컨테이너 이미지(Container image)로 배포 가능.
- 배포 도구 및 프레임워크: AWS SAM, Serverless Framework, AWS CDK, CloudFormation 등.
- 모듈화와 재사용
- Layers를 활용해 공통 라이브러리 공유.
- Alias와 Version를 활용해 롤백 및 안정적 배포를 구현.
---
## 예시 코드
- Python 3.11 간단 핸들러
```python
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": "Hello from Lambda!"
}
```
- Node.js 18 간단 핸들러
```javascript
exports.handler = async (event) => {
return {
statusCode: 200,
body: "Hello from Lambda!"
};
};
```
---
## 모니터링, 로깅 및 디버깅
- 로깅
- 기본 로그는 CloudWatch Logs로 자동 수집.
- 로그 포맷 및 구조를 일관되게 구성하면 모니터링이 용이.
- 지표와 알람
- 요청 수, 실패율, 평균 실행 시간, 프로비저닝된 동시 실행 수 등을 CloudWatch Metrics에서 확인.
- 임계치 기반의 알람 설정으로 이상징후를 조기에 탐지.
- 트레이싱
- AWS X-Ray를 이용한 분산 트레이스 수집으로 핀포인트 디버깅 가능.
- 테스트 및 로컬 개발
- SAM CLI를 이용한 로컬 테스트 및 디버깅 가능.
- 단위 테스트 및 모의 이벤트(Mock Event) 활용 권장.
---
## 성능 최적화 및 비용 관리
- 적정 메모리 할당
- 메모리 크기를 조정해 CPU 성능과 실행 비용의 균형을 맞춘다. 과도한 메모리는 비용 증가를 야기할 수 있다.
- 동시성 관리
- 기본 동시성 한도 확인 및 필요 시 조정.
- Provisioned Concurrency를 활용해 핫 스텟을 유지할 수 있다.
- 배포 전략
- 버전과 별칭을 활용한 점진적 배포로 다운타임을 최소화.
- CodeDeploy/CI-CD 파이프라인과 연동하여 안정적인 운영.
- 네트워크 고려
- VPC 연결 시 NAT Gateway/인터넷 경로 비용 및 대기 시간에 주의.
---
## 보안 모범 사례
- 최소 권한 원칙
- Lambda 역할은 필요한 최소 권한만 부여.
- 환경 변수 보안
- 민감한 정보는 AWS KMS로 암호화된 시크릿 관리 또는 AWS Secrets Manager에서 주입.
- 네트워크 격리
- 공개 엔드포인트를 피하거나, VPC 내에서 필요한 리소스에만 접근하도록 구성.
- 감사 및 규정 준수
- CloudTrail을 통한 Lambda 호출 추적 및 변경 이력 관리.
---
## 배포 및 운영 관행
- CI/CD 파이프라인
- 코드 변경 시 자동 테스트, 보안 검사, 패키징 및 배포를 포함하는 파이프라인 구성.
- Canary/Blue-Green 배포
- 별칭(Alias) 및 버전 관리로 순차적 배포 및 롤백 지원.
- 장애 대비 설계
- DLQ, 재시도 정책, 아이덴티티 및 자격 증명의 안전한 관리로 장애 시 복구를 용이하게 함.
---
## 지역성, 한계 및 비교
- 지역성
- Lambda는 여러 AWS 리전에서 운영 가능하며, 리전 간 데이터 전송 시 비용과 지연이 발생할 수 있다.
- 한계와 주의점
- 런타임별 지원 버전 및 기능 차이, 동시성 한도, VPC 연결 시 및 기타 네트워크 제약 우선 고려.
- 비교
- 전통적 EC2 인스턴스나 컨테이너 기반 서비스와 달리 서버 관리가 필요 없고, 자동 확장성과 이벤트 중심 구성이 강점이다.
---
## 역사 및 발전 방향
- 초기 도입은 간단한 이벤트 처리에서 시작되어 현재는 API Gateway, S3, DynamoDB, EventBridge 등 다양한 이벤트 소스와의 깊은 통합을 제공한다.
- 향후 확장으로는 더 강력한 보안 기능, 성능 예측 개선, 더 나은 개발자 경험 및 로컬 개발 생태계 강화가 지속될 전망이다.
---
관련 문서: [[AWS Lambda 아키텍처 및 이벤트 소스 트리거]], [[AWS Lambda 보안 모범 사례]]