AWS Lambda를 활용한 API 개발의 전체 구조와 흐름

Sue·2025년 6월 10일
0
post-thumbnail

AWS Lambda를 활용한 API 개발은 서버리스 아키텍처를 기반으로 하며, 클라이언트 요청 → API Gateway → Lambda 함수 → 데이터 처리 → 응답의 흐름으로 구성됩니다. 전체 구조와 핵심 단계를 세부적으로 분석해 보겠습니다.


전체 아키텍처 구조

[클라이언트]  
    │  
    ▼ HTTPS 요청  
[API Gateway]  
    │  
    ▼ 이벤트 트리거  
[AWS Lambda]  
    │  
    ▼ 데이터 처리  
[DynamoDB/S3/RDS 등]  

1. 핵심 컴포넌트

1.1 API Gateway

  • 역할: 클라이언트의 HTTP 요청을 수신하고, 해당 엔드포인트에 연결된 Lambda 함수를 호출합니다.
  • 기능:
    • REST/HTTP API 생성
    • 라우팅 규칙 설정 (예: /users → 사용자 관리 Lambda 함수)
    • 인증/인가 (Cognito, IAM, JWT 통합)
    • 요청/응답 변환 (비프록시 통합 시)

1.2 AWS Lambda

  • 역할: 비즈니스 로직 실행 (예: 사용자 등록, 데이터 조회).
  • 특징:
    • 이벤트 기반 실행 (최대 15분)
    • 자동 확장 (초당 수천 개의 병렬 실행)
    • 언어 지원: Node.js, Python, Java 등

1.3 데이터 계층

  • DynamoDB: Serverless NoSQL DB로 Lambda와의 실시간 연동에 최적화
  • S3: 정적 파일 저장 또는 대용량 데이터 처리.
  • RDS: 관계형 데이터베이스 (VPC 연결 필요)

2. 개발 흐름 단계

2.1 인프라 설계

  • API 엔드포인트 정의:
    | 메서드   | 경로           | Lambda 함수      |
    |----------|----------------|------------------|
    | GET      | /items         | getItems         |
    | POST     | /items         | createItem       |
    | GET      | /items/{id}    | getItemById      |
  • Lambda 함수 생성:
    • 코드 작성 (예: Node.js/Python)
    • 환경 변수로 DB 연결 정보 관리
    • IAM 역할을 통해 DynamoDB 접근 권한 부여

2.2 API Gateway 통합

  • 프록시 vs 비프록시 통합:
    • 프록시: 전체 요청을 Lambda에 전달 → 유연성 높음
    • 비프록시: 요청 매핑 템플릿으로 데이터 변환 → 구조화된 입력 제어
  • CORS 설정: 도메인 간 요청 허용 정책 정의

2.3 배포 및 테스트

  • 배포 방법:
    • AWS 콘솔, CLI, CDK/CloudFormation (IaC)
  • 테스트 도구:
    • Postman, curl, AWS 콘솔 내 테스트 기능

3. 보안 고려사항

  • IAM 역할: Lambda 함수에 최소 권한 부여 (예: DynamoDB ReadOnly)
  • API 인증:
    • Cognito 사용자 풀을 통한 OAuth 2.0 인증
    • API 키를 이용한 사용량 제한
  • 암호 관리: Secrets Manager로 DB 비밀번호 관리

4. 운영 시 고려할 이슈

  • 콜드 스타트: 초기 실행 지연을 줄이기 위해 Provisioned Concurrency 사용.
  • 로깅: CloudWatch Logs로 함수 실행 이력 모니터링
  • 비용 최적화:
    • Lambda 실행 시간 최소화 (메모리 설정 조정).
    • API Gateway 캐싱 활성화

실제 구현 예시

Scenario: 사용자 프로필 조회 API
1. 클라이언트 → GET /users/{userId} 요청.
2. API Gateway → getUserProfile Lambda 함수 호출.
3. Lambda → DynamoDB에서 userId로 데이터 조회.
4. 응답: JSON 형식의 사용자 정보 반환.

# Lambda 함수 예제 (Python)
import boto3

def lambda_handler(event, context):
    user_id = event['pathParameters']['userId']
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('Users')
    response = table.get_item(Key={'userId': user_id})
    return {
        'statusCode': 200,
        'body': response['Item']
    }

요약

AWS Lambda 기반 API 개발은 API Gateway를 통한 라우팅 → Lambda에서 비즈니스 로직 처리 → 데이터 계층과 연동의 구조로 이루어집니다. 서버 관리 없이 확장성과 비용 효율성을 확보할 수 있지만, 콜드 스타트 및 실행 시간 제한 등 서버리스 특유의 제약을 이해하고 설계해야 합니다.

profile
AI/ML Engineer

0개의 댓글