본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
AWS Lambda; Lambda; AWS 람다
서버를 준비하지 않고 이벤트가 발생할 때 함수 코드를 실행하고, 요청 수와 실행 시간만큼만 요금을 내는 AWS의 서버리스 컴퓨팅 서비스

Lambda는 FaaS(Function as a Service) 방식의 서비스이다. 이용자는 함수 코드와 메모리·제한 시간 같은 설정만 올리고, 실행 환경의 프로비저닝, OS 패치, 확장, 가용 영역 분산은 AWS가 맡는다. 요청이 없으면 비용이 거의 들지 않고 요청이 몰리면 실행 환경을 자동으로 늘린다. API 백엔드, 파일 업로드 후처리, 대기열·스트림 소비, 정기 작업, AWS 서비스 사이를 잇는 접착 코드에 많이 쓴다. 프로그래밍 언어의 익명 함수 개념인 람다 함수와는 다른 것이다.

항목 설명
함수 실행 단위. 런타임(Python, Node.js, Java 등)과 핸들러, 설정으로 구성
실행 환경 함수가 실행되는 격리된 환경. 재사용될 수 있지만 언제든 사라질 수 있으므로 상태는 외부에 둔다.
트리거·이벤트 소스 함수를 호출하는 주체(API Gateway, S3, SNS, SQS, EventBridge 등)
실행 역할 함수가 다른 AWS 서비스를 호출할 때 쓰는 IAM 역할
동시성 같은 순간 처리 중인 요청 수. 동시 요청마다 실행 환경이 하나씩 필요하다.
버전·별칭 배포한 코드를 고정한 스냅샷(버전)과 그것을 가리키는 이름(별칭). 별칭으로 트래픽을 나눠 카나리 배포가 가능하다.
방식 동작 대표 이벤트 소스 오류 처리
동기 호출 호출자가 응답을 기다림 아마존 API Gateway, Application Load Balancer, 함수 URL, SDK 직접 호출 호출자가 재시도 여부 결정
비동기 호출 Lambda가 이벤트를 내부 대기열에 넣고 바로 성공 응답 아마존 S3, 아마존 SNS, 아마존 EventBridge 함수 오류 시 기본 2회 재시도, 제한·시스템 오류는 최대 6시간까지 재시도
이벤트 소스 매핑(폴링) Lambda가 대기열·스트림을 읽어 배치로 호출 아마존 SQS, Kinesis, DynamoDB Streams, 아마존 MSK·자체 관리 Kafka, 아마존 MQ, DocumentDB 배치 단위 재시도, 소스별 실패 처리 설정
  • 이벤트 소스 매핑은 최소 1회 처리이므로 같은 레코드가 두 번 처리될 수 있다. 함수 코드를 멱등하게 만들어야 한다.
  • 비동기 호출의 실패 이벤트는 대상(destination)이나 배달 못한 편지 대기열(DLQ)로 보낸다. 대상은 성공·실패를 따로 지정할 수 있고 SQS, SNS, Lambda, EventBridge, S3(실패 시에만)를 지원하며 응답 정보까지 담는다. DLQ는 표준 SQS 대기열이나 SNS 토픽만 쓸 수 있고 이벤트 내용만 남긴다.

수치는 2026년 10월 AWS Lambda 할당량 문서 기준이다.

항목 값
메모리 128MB~10,240MB(1MB 단위). CPU는 메모리에 비례해 할당되며 1,769MB에서 vCPU 1개에 해당한다.
제한 시간 최대 900초(15분)
리전당 동시 실행 기본 1,000(증가 요청 가능)
함수별 확장 속도 10초마다 실행 환경 1,000개
호출 페이로드 동기 요청·응답 각 6MB, 비동기 1MB
배포 패키지 .zip 업로드 50MB(압축), 계층 포함 압축 해제 250MB. 컨테이너 이미지는 10GB
계층 함수당 5개
/tmp 임시 스토리지 512MB~10,240MB

15분이 넘는 작업은 AWS Step Functions로 쪼개거나 AWS Fargate, 아마존 EC2 같은 다른 컴퓨팅을 쓴다. 이 밖에 EC2 인스턴스 위에서 Lambda 함수를 돌리는 Lambda Managed Instances는 별도의 실행 시간 규칙을 따른다.

예약된 동시성과 프로비저닝된 동시성의 동작 비교
  • 예약된 동시성(reserved concurrency): 함수에 동시성 일부를 떼어 주어 다른 함수가 쓰지 못하게 한다. 동시에 그 함수의 상한이 된다. 다운스트림 DB를 보호하려고 동시 실행을 제한할 때도 쓴다. 0으로 두면 함수 호출이 멈춘다. 추가 요금은 없다.
  • 프로비저닝된 동시성(provisioned concurrency): 지정한 수만큼 실행 환경을 미리 초기화해 두어 콜드 스타트를 없앤다. 켜 둔 시간만큼 요금이 붙는다. Application Auto Scaling으로 시간대별 조정이 가능하다.

콜드 스타트와 SnapStart

편집 원본 편집

새 실행 환경을 만들 때 코드 다운로드, 런타임 시작, 초기화 코드 실행으로 지연이 생기는 것을 콜드 스타트라 한다.

  • 지연에 민감하고 트래픽이 예측 가능하면 프로비저닝된 동시성을 쓴다.
  • Lambda SnapStart는 함수 버전을 게시할 때 초기화된 실행 환경의 메모리·디스크 스냅샷을 떠 두고, 이후 새 환경을 스냅샷에서 복원한다. Java 11 이상, Python 3.12 이상, .NET 8 이상 관리형 런타임을 지원한다. 고유값(난수 시드, 연결 등)을 초기화 단계에 만들면 스냅샷 복원 시 중복될 수 있으므로 주의한다.
  • 패키지와 의존성을 줄이고 초기화 코드를 가볍게 하는 것도 기본 대책이다.
  • 기본 상태의 함수는 AWS가 관리하는 네트워크에서 실행되어 인터넷에 나갈 수 있지만, 이용자 VPC의 프라이빗 리소스(RDS, ElastiCache 등)에는 닿지 않는다.
  • 함수를 VPC에 연결하면 Lambda가 서브넷·보안 그룹 조합마다 Hyperplane ENI를 만들어 VPC 안 리소스에 접근한다.
  • VPC에 연결한 함수는 퍼블릭 서브넷에 붙여도 퍼블릭 IP가 생기지 않는다. 인터넷이 필요하면 프라이빗 서브넷에 연결하고 NAT 게이트웨이로 경로를 잡는다. AWS 서비스만 호출한다면 VPC 엔드포인트가 더 저렴하고 안전하다.
  • 많은 함수가 RDS에 직접 연결하면 연결 수가 폭증하므로 아마존 RDS Proxy를 앞에 둔다.
  • .zip 아카이브: 코드와 의존성을 압축해 올린다.
  • 계층(layer): 공용 라이브러리, 사용자 지정 런타임, 설정 파일을 별도 .zip으로 만들어 여러 함수가 공유한다.
  • 컨테이너 이미지: 최대 10GB 이미지를 아마존 ECR에 올려 배포한다. 큰 ML 모델이나 기존 도커 기반 빌드 체계를 쓸 때 맞는다.

요청 수와 실행 시간(GB-초, 1ms 단위 올림)에 따라 과금된다. 실행 시간 단가는 할당 메모리에 비례한다. 프로비저닝된 동시성, 추가 임시 스토리지, 데이터 전송은 별도이다. 메모리를 늘리면 CPU도 늘어 실행 시간이 줄 수 있으므로, 메모리를 높였더니 전체 비용이 오히려 줄어드는 경우도 있다. 꾸준한 사용량은 Compute Savings Plans로 할인받을 수 있다.

적합·부적합 사례

편집 원본 편집
적합 부적합
간헐적이거나 예측 불가한 트래픽의 API 백엔드 15분을 넘는 장시간 연산
S3 업로드 후 썸네일 생성, 파일 검증 지속 연결이 필요한 서버, 특정 OS·커널 설정이 필요한 소프트웨어
SQS·Kinesis 메시지 처리, 데이터 변환 콜드 스타트를 전혀 허용할 수 없는데 프로비저닝도 어려운 초저지연 시스템
EventBridge Scheduler로 돌리는 정기 작업 24시간 일정하게 높은 부하(컨테이너나 EC2가 더 저렴할 수 있음)
  • "서버 관리 없이", "운영 오버헤드 최소", "이벤트 발생 시 실행"이면 Lambda가 정답 후보이다. 단, 작업이 15분을 넘으면 Lambda 단독 보기는 오답이다.
  • 콜드 스타트로 지연이 문제라면 프로비저닝된 동시성(Java·Python·.NET이면 SnapStart도)을 고른다.
  • 특정 함수가 동시성을 다 써서 다른 함수가 제한되거나 DB가 과부하되면 예약된 동시성을 설정한다.
  • VPC 안의 RDS에 접근해야 하면 함수를 VPC에 연결한다. 그 상태에서 인터넷이 필요하면 NAT 게이트웨이를 추가한다.
  • 비동기 호출 실패 기록은 대상(on-failure destination)이나 DLQ로 남긴다. SQS를 이벤트 소스로 쓸 때는 SQS 대기열 쪽 DLQ(재처리 정책)를 설정한다.
  • 함수 성능이 부족하면 메모리를 늘린다. CPU를 따로 지정하는 설정은 없다.