본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] AWS Lambda로 서버리스 Python 애플리케이션 구축하기

by Papa Martino V 2025. 7. 25.
728x90

AWS Lambda로 서버리스 Python 애플리케이션 구축하기
[PYTHON] AWS Lambda

 

클라우드 시대에 서버를 운영하지 않고도 애플리케이션을 개발하고 실행할 수 있는 방법이 있다면 어떨까? 바로 AWS LambdaPython의 조합을 통해 가능해진다. 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 콘솔로 직접 생성

  1. AWS Lambda 콘솔 접속
  2. "함수 생성" 클릭 → 런타임은 "Python 3.11" 선택
  3. 함수 이름 입력, 권한 자동 생성 선택
  4. 코드 탭에서 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 함수로 전달한다.

  1. API Gateway → REST API 생성
  2. 리소스 및 메서드 추가 (예: GET /hello)
  3. Lambda 함수 통합 지정
  4. 배포 후 생성된 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)

728x90