AWS Lambda는 서버를 직접 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 코드를 업로드하면 AWS가 실행 환경을 자동으로 준비하고, 요청이 들어올 때만 함수를 실행합니다. 실행된 시간과 요청 횟수만큼만 비용이 청구되므로, 트래픽이 불규칙하거나 소규모인 워크로드에 특히 적합합니다.
Lambda 함수는 Event가 발생해야 실행됩니다. Event란 함수를 호출하는 데이터 페이로드로, 어떤 서비스가 어떤 상황에서 이 이벤트를 발생시키는지를 정의하는 설정이 Trigger입니다.
대표적인 Trigger 예시는 다음과 같습니다.
Runtime은 Lambda 함수가 실행되는 언어 환경입니다. AWS는 Node.js, Python, Java, Go, Ruby, .NET 등 다양한 Runtime을 공식 지원합니다. 공식 지원 Runtime 외에도 Custom Runtime을 구성하면 거의 모든 언어로 함수를 작성할 수 있습니다.
각 Runtime은 Lambda 실행 환경 이미지로 관리되며, AWS가 버전별 보안 패치 및 업데이트를 제공합니다. Runtime이 지원 종료(deprecated)되면 해당 버전으로는 새 함수를 생성할 수 없으므로 주기적인 버전 업그레이드가 필요합니다.
Lambda 함수가 오랫동안 호출되지 않다가 새로운 요청이 들어오면, AWS는 새로운 실행 환경(컨테이너)을 초기화해야 합니다. 이 초기화 과정에서 발생하는 지연 시간을 Cold Start라고 합니다.
첫 번째 요청 (Cold Start)
요청 도착
└─> 실행 환경 초기화 (수백ms ~ 수초)
└─> 함수 핸들러 실행
└─> 응답 반환
이후 요청 (Warm Start)
요청 도착
└─> 기존 실행 환경 재사용
└─> 함수 핸들러 실행 (거의 즉시)
└─> 응답 반환
Cold Start를 완화하는 방법으로는 Provisioned Concurrency(미리 실행 환경을 준비해 두는 기능)를 사용하거나, 함수 패키지 크기를 최소화하거나, 메모리를 늘려 초기화 속도를 높이는 방법이 있습니다.
| 항목 | Lambda | EC2 | ECS |
|---|---|---|---|
| 서버 관리 | 불필요 | 직접 관리 | 컨테이너 오케스트레이션 |
| 실행 단위 | 함수 (이벤트 기반) | 인스턴스 (항시 실행) | 컨테이너 (태스크 기반) |
| 최대 실행 시간 | 15분 | 제한 없음 | 제한 없음 |
| 과금 방식 | 요청 수 + 실행 시간 | 인스턴스 가동 시간 | 태스크 실행 시간 |
| 스케일링 | 자동 (요청별) | Auto Scaling 설정 필요 | ECS Service 설정 필요 |
| Cold Start | 있음 | 없음 | 없음 |
Lambda는 짧은 시간 안에 완료되는 이벤트 기반 작업(이미지 리사이징, 알림 발송, API 응답 처리 등)에 가장 적합합니다. 반면 EC2와 ECS는 상시 실행이 필요한 서버 프로세스나 15분을 초과하는 장기 실행 작업에 더 적합합니다.
Lambda Function
+----------------------------------+
| Handler (진입점) |
| Runtime (언어 환경) |
| Memory (128MB~10GB) |
| Timeout (최대 15min) |
| Environment Variables |
| IAM Execution Role |
| VPC Config (선택) |
+----------------------------------+
^
| Trigger
+----+----+
| S3 / API Gateway / SQS / ... |
+-------------------------------+
Lambda는 서버리스 아키텍처의 핵심 서비스로, API Gateway·SQS·EventBridge 등과 조합하면 별도의 서버 없이도 확장 가능한 백엔드 시스템을 구축할 수 있습니다.