티스토리 뷰
8-1. Lambda 소개
서버 없이 코드를 실행하는 함수 실행 서비스 (FaaS)
Serverless
서버를 안 쓰는 게 아니라 '서버를 신경 안 써도 되는 것'

- 인프라 관리 불필요
- 필요한 컴퓨팅 소스 동적 할당
- 사용한만큼 비용 지불
- 확장성과 보안성
- 실시간 서비스에는 적합하지 않음(Cold Start)
- Baas / Faas
Baas
이미 만들어진 백엔드를 API로 제공
- Backend as a Service
- 여러 백엔드 업무를 API로 제공함
- 로그인, 데이터베이스, SNS 연동, 파일시스템 등
- API를 사용한 만큼 비용 측정
- 개발 시간 단축
Faas
내가 직접 함수 코드를 작성해서 실행
- Function as a Service
- 함수 제공 서비스
- 프로그래밍 언어를 이용하여 함수 개발
- 이벤트(트리거)가 발생하면 함수 호출 및 종료
- 함수가 실행되는 횟수만큼 비용 측정
| BaaS | FaaS | |
| 역할 | 완성된 기능 제공 | 함수 실행 |
| 코드 작성 | 거의 없음 | 필요 |
| 대표 | S3, Firebase | Lambda |
Lambda
[ 전체 흐름 ]
이벤트 발생 → Lambda 실행 → 결과 반환
[ 예시 ]
1. S3에 파일 업로드
2. Lambda 실행
3. 데이터 처리
4. 결과 저장 (S3 / DB)
5. 이 전처리된 데이터가 담긴 S3에서 데이터를 가지고 Athena에서 분석 하는 등 기타 작업을 하면 됨
- 서버리스 컴퓨팅 Faas
- NodeJS, Python, Java 등 다양한 언어 지원
- 이벤트, 트리거 기반 실행 (Event-driven)
- 비용 및 운영관리 절감
- 리소스 제한 (메모리 10GB, 실행시간 15분 등)
- Cold Start
- ✅ Cold Start는 Lambda가 처음 실행될 때 느린 현상을 말함 (꼭 Lambda에만 말하는건 아님)
- 주로 컨테이너 생성 및 런타임 로딩으로 인해 발생됨
- 예를들어 오랜 시간 호출이 없어서 다시 호출할때 느린 그 느낌
- 그러니까 Lambda는 Cold Start 하니까 당연히 실시간 서비스에는 부적합한것이다.
- 사용한만큼 지불
- 배치 프로세싱, 이벤트 기반 실행
Lambda Pricing 과금 구조
- (요청 수 x 요청당 비용) + (실행 시간 x 메모리 할당량 x 시간당 비용)

EC2 vs Lambda
| EC2 | Lambda | |
| 컴퓨팅 모델 | 가상 머신(VM) 기반 | 함수 기반 서버리스 |
| 운영 방식 | 24시간 상시 실행 | 이벤트나 트리거 기반으로 실행 |
| 과금 방식 | 시간 단위 과금 | 사용한만큼 과금 |
| 유지보수 | OS, 미들웨어 등 유지보수 필요 | 코드 업데이트와 설정만 관리 |
| 사용 사례 | 웹 서버, DB서버, 배포환경 | 이벤트 기반 데이터 처리, 로그 분석 |
Lambda 함수 구성

- Context 객체에는 런타임 정보가 담겨져 있음
Trigger & Target
- 특정 이벤트가 발생하여 Trigger가 실행
- S3 버킷에 객체 업로드
- API Gateway를 통한 HTTP 요청
-> 결과 값에 대한 것을 Target으로 전달
Trigger
Lambda를 실행 시키는 것
- Lambda 함수를 실행하도록 하는 이벤트 소스
- S3, DynamoDB, SNS 등 여러 AWS 서비스 제공
- 각 소스별로 다양한 이벤트 유형이 존재

Target
Lambda 실행 결과를 보내는 곳
- 비동기 방식 호출의 실행 결과를 전달
- 성공 또는 실패 이벤트에 대해 결과 전송
- SNS 토픽, SQS Queue, Lambda 등

8-2. Lambda 사용해보기
아래와 같은 파이썬 코드를 통해 Lambda 를 구성해서 실행해보았다.
- Test 전 코드 변경 사항을 항상 Deploy 해야 함!
import json
def lambda_handler(event, context):
# TODO implement (실행 할 내용을 적어두면 됨)
print('Hello World')
print(f'EVENT: {event}')
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
8-3. S3와 연동하기
S3 버킷에 새로운 객체가 추가되면 Lambda 가 Trigger 되는 로직을 만들어보자.
1. 새로운 test event 미리 생성하기

생성된 test event의 event JSON을 바탕으로 아래와 같은 파이썬 코드를 작성하였다.
import json
def lambda_handler(event, context):
# TODO implement
# 버킷 명 출력
print(event['Records'][0]['s3']['bucket']['name'])
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
결과물은 아래와 같게 잘 나오게 된다.

똑같이 객체 명도 보이도록 하면 아래와 같게 나오게 된다.

2. Trigger 설정


이 부분은 만약 S3에서 데이터 프로세싱을 해서 그 결과물을 해당 S3에 또 저장하게 되면
그 저장됨을 감지해서 또 Lambda 함수가 실행되기 때문에 (재귀적) 이는 비용이 증가할 수 있음을 인지하라는 배려(?)다.
3. 실제 S3 버킷에 파일 업로드 후 동작 확인
S3 버킷에 파일(객체)를 업로드 후
Lambda -> 모니터링 -> CloudWatch Logs 보기 클릭

아래와 같이 정상적으로 로그에 찍히는것을 볼 수 있다. (Bucket Name은 캡쳐 이슈로 잘못찍힘)

'DataEngineer(DE) > AWS를 이용한 데이터 엔지니어링' 카테고리의 다른 글
| AWS를 이용한 데이터 엔지니어링(9) - QuickSight (0) | 2026.04.03 |
|---|---|
| AWS를 이용한 데이터 엔지니어링(8) - Redshift & 최적화 전략 (1) | 2026.04.02 |
| AWS를 이용한 데이터 엔지니어링(6) - Athena & Athena 최적화 전략 (0) | 2026.03.30 |
| AWS를 이용한 데이터 엔지니어링(5) - Glue, Data Catalog, Glue ETL (0) | 2026.03.28 |
| AWS를 이용한 데이터 엔지니어링(4) - 스토리지 & 데이터 레이크 & 레이크 하우스 (0) | 2026.03.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- de
- Databricks
- lakehouse
- elasticip
- docker
- lake house
- Data Pipeline
- Daynamic Task
- spark
- Glue
- iceberg
- AWS
- RDD
- Spark structured streaming
- 데이터파이프라인
- Data Dngineering
- Unity Catalog
- Data Engineerring
- DAG
- kafka
- Glue ETL
- DataSet
- Consumer DAG
- Data engineering
- airflow
- Prodcuder DAG
- Backfill
- s3
- AWS Glue Catalog
- catchup
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
글 보관함
