
클라우드 시대에 서버를 운영하지 않고도 애플리케이션을 개발하고 실행할 수 있는 방법이 있다면 어떨까? 바로 AWS Lambda와 Python의 조합을 통해 가능해진다. Lambda는 서버를 직접 관리하지 않고도 코드를 실행할 수 있는 서버리스(serverless) 컴퓨팅 서비스이며, Python은 이를 빠르고 유연하게 개발할 수 있는 언어로 각광받고 있다. 이 글에서는 AWS Lambda를 Python으로 작성하고 배포하는 전 과정을 다룬다. 기본 개념부터 실무 예제, 배포 자동화까지 초보자도 실습 가능한 예제 중심으로 설명한다. 단순한 튜토리얼이 아닌, 비용 절감, 확장성, 운영 자동화 측면에서 서버리스의 진정한 가치를 전달하는 데 중점을 두었다.
1. AWS Lambda란?
AWS Lambda는 Amazon Web Services에서 제공하는 이벤트 기반 컴퓨팅 서비스로, 개발자가 서버를 관리하지 않고도 코드를 실행할 수 있게 해준다. 클라우드 인프라 운영에 대한 부담 없이 비즈니스 로직에만 집중할 수 있다는 장점이 있다.
- 서버 없음 (서버리스)
- 자동 확장
- 사용한 만큼 과금 (100ms 단위)
- 트리거 기반 실행 (예: S3, DynamoDB, API Gateway 등)
2. Lambda + Python 기본 개념
Lambda에서 실행 가능한 언어로 Python은 공식적으로 지원되며, 현재 Python 3.12까지 사용 가능하다. Lambda 함수는 기본적으로 다음과 같은 형식을 가진다.
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': 'Hello from Lambda'
}
- event: 함수 실행을 트리거한 이벤트 정보 (JSON)
- context: 함수 실행 환경에 대한 메타 정보
3. AWS Lambda 생성 및 배포
3.1 AWS 콘솔로 직접 생성
- AWS Lambda 콘솔 접속
- "함수 생성" 클릭 → 런타임은 "Python 3.11" 선택
- 함수 이름 입력, 권한 자동 생성 선택
- 코드 탭에서 Python 코드 작성
3.2 AWS CLI로 배포
zip function.zip lambda_function.py
aws lambda create-function \
--function-name my-python-function \
--runtime python3.11 \
--role arn:aws:iam::123456789012:role/lambda-role \
--handler lambda_function.lambda_handler \
--zip-file fileb://function.zip
IAM Role은 Lambda가 로그 기록 등을 수행할 수 있도록 사전 생성 필요
4. API Gateway와 연동하기
Lambda 단독 실행은 테스트 용도로만 사용되며, 실무에서는 AWS API Gateway를 이용해 HTTP 요청을 Lambda 함수로 전달한다.
- API Gateway → REST API 생성
- 리소스 및 메서드 추가 (예: GET /hello)
- Lambda 함수 통합 지정
- 배포 후 생성된 URL 확인
# Lambda 함수 예제
def lambda_handler(event, context):
name = event.get("queryStringParameters", {}).get("name", "익명")
return {
'statusCode': 200,
'body': f'안녕하세요, {name}님!'
}
5. Lambda의 이벤트 예시 비교
| 트리거 | 설명 | 대표 이벤트 구조 |
|---|---|---|
| S3 | 파일 업로드/삭제 감지 | event['Records'][0]['s3']['object']['key'] |
| API Gateway | HTTP 요청 처리 | event['queryStringParameters'] |
| DynamoDB | 테이블 변경 이벤트 감지 | event['Records'][0]['dynamodb'] |
| CloudWatch | 스케줄링 (cron) | event['source'] == "aws.events" |
6. 외부 패키지 포함 방법
Lambda에서 pandas, requests 등 외부 라이브러리를 사용하려면 requirements.txt 기반으로 로컬 환경에서 패키징 후 업로드해야 한다.
# 디렉토리 구성
lambda_function/
├── lambda_function.py
├── requests/
├── requests_toolbelt/
pip install -t ./ requests requests_toolbelt
zip -r function.zip .
aws lambda update-function-code --function-name my-func --zip-file fileb://function.zip
7. Lambda Layer로 패키지 공유
여러 Lambda 함수에서 같은 패키지를 사용할 경우 Lambda Layer를 통해 공통 패키지를 분리해 재사용할 수 있다.
mkdir python
pip install requests -t python/
zip -r layer.zip python
aws lambda publish-layer-version \
--layer-name requests-layer \
--zip-file fileb://layer.zip \
--compatible-runtimes python3.11
8. Lambda의 한계와 주의점
- 최대 실행 시간: 15분
- 디스크 공간: /tmp 기준 512MB
- 동시 실행 제한: 기본 1,000개
- 패키지 크기 제한: 250MB (압축 시 50MB)
- Cold Start 이슈: 컨테이너 로딩에 몇 초 지연 발생 가능
9. 실전 적용 사례
| 적용 분야 | 설명 | 트리거 |
|---|---|---|
| 이미지 리사이징 | S3에 업로드된 이미지를 자동으로 변환 | S3 |
| Webhook 수신 | 외부 서비스 요청을 받아 DB 저장 | API Gateway |
| 크론 자동화 | 매일 특정 시간에 데이터 수집 | CloudWatch Event |
| Slack 알림 | 특정 이벤트 발생 시 슬랙 메시지 발송 | DynamoDB or SQS |
결론: 서버리스 시대, Python 개발자의 날개
Python과 AWS Lambda는 코드만 작성하면 실행되는 진정한 서버리스 환경을 구현할 수 있는 조합이다. 인프라 구성, 유지보수, 확장성에 대한 고민 없이, 순수한 기능 개발에만 집중할 수 있다는 점은 특히 개인 개발자나 스타트업, 자동화 환경에서 매력적이다.
처음에는 단순한 자동화에서 시작할 수 있지만, 점차 복잡한 마이크로서비스나 머신러닝 파이프라인까지 확장 가능하다. Python 개발자라면 이제 서버 없는 세상으로 한 발 더 나아가보자.
출처 (References)
'Artificial Intelligence > 60. Python' 카테고리의 다른 글
| [PYTHON] threading vs asyncio : 동시성 프로그래밍 완전 비교 (0) | 2025.07.25 |
|---|---|
| [PYTHON] setup.py vs pyproject.toml : Python 패키징의 과거와 미래 (0) | 2025.07.25 |
| [PYTHON] Python 프로젝트에 Docker 적용하기: 개발과 배포를 혁신하는 방법 (0) | 2025.07.25 |
| [PYTHON] CSV 파일 읽기 & 쓰기 완벽 가이드 : csv 모듈부터 pandas까지 (0) | 2025.07.25 |
| [PYTHON] numpy reshape 완벽 가이드: 다차원 배열을 자유자재로 다루는 법 (0) | 2025.07.25 |