[파이썬] AWS Lambda와 CloudFront를 활용한 캐싱 전략

AWS Lambda와 CloudFront는 모두 AWS의 서비스 중에서도 많은 사용자들이 가장 자주 사용하고 있는 서비스입니다.

이번 블로그 포스트에서는 AWS Lambda와 CloudFront를 활용하여 캐싱 전략을 구현하는 방법에 대해 알아보겠습니다.

CloudFront란?

CloudFront는 AWS의 전역 배포 네트워크로, CDN(Content Delivery Network)의 역할을 수행합니다. CloudFront는 웹 콘텐츠를 사용자에게 빠르게 전달하기 위해 정적 콘텐츠를 캐시하고, 사용자들과 가장 가까운 Edge Location에서 콘텐츠를 제공합니다.

Lambda@Edge란?

Lambda@Edge는 AWS Lambda 서비스를 사용하여 클라우드프론트에서 실행되는 서버리스 기능을 구현할 수 있게 해주는 기능입니다.

Lambda@Edge는 CloudFront가 요청을 처리하는 단계에 사용자 정의 코드를 실행할 수 있는 기능을 제공합니다. 이를 통해 사용자는 로깅, 사용자 인증, 동적 콘텐츠 생성, 조건부 리디렉션 등 다양한 작업을 수행할 수 있습니다.

캐싱 전략 구현하기

아래는 Python에서 AWS Lambda와 CloudFront를 활용하여 캐싱 전략을 구현하는 간단한 예제 코드입니다.

import json

def lambda_handler(event, context):
    # CloudFront로부터의 요청 정보 추출
    request = event['Records'][0]['cf']['request']

    # 요청 URL에 따라 필요한 정보 캐싱
    url = request['uri']
    if url.endswith('.html'):
        # html 파일은 1시간 동안 캐싱
        ttl = 3600
    elif url.endswith('.css'):
        # css 파일은 1일 동안 캐싱
        ttl = 86400
    else:
        # 그 외의 파일은 5분 동안 캐싱
        ttl = 300
    
    # CloudFront 캐시 설정을 위한 응답 헤더 설정
    response = {
        'status': '200',
        'statusDescription': 'OK',
        'headers': {
            'cache-control': [{
                'key': 'Cache-Control',
                'value': f'max-age={ttl}'
            }]
        }
    }
    
    return response

이 예제 코드에서는 CloudFront로부터 전달받은 요청의 URL을 확인하여 해당 콘텐츠의 TTL(Time-to-Live)을 설정합니다. HTML 파일은 1시간, CSS 파일은 1일, 그 외의 파일은 5분 동안 캐싱됩니다.

이후, 캐시 설정을 위한 응답 헤더를 설정하여 CloudFront가 콘텐츠를 캐싱하도록 지시합니다.

Lambda 함수 배포하기

위의 코드를 AWS Lambda 함수로 배포하려면 다음 단계를 따르세요.

  1. AWS Management 콘솔에서 Lambda 서비스로 이동합니다.
  2. “함수 만들기” 버튼을 클릭하여 함수 생성 페이지로 이동합니다.
  3. Python 3.7 런타임 환경을 선택합니다.
  4. 함수 코드로 위의 예제 코드를 복사하여 붙여넣기합니다.
  5. 필요한 권한 및 환경 설정을 구성합니다.
  6. “테스트” 버튼으로 함수를 테스트합니다.
  7. “배포” 버튼을 클릭하여 Lambda 함수를 배포합니다.

CloudFront에서 Lambda 함수 연결하기

  1. AWS Management 콘솔에서 CloudFront 서비스로 이동합니다.
  2. 해당 Distribution을 선택하고 “편집” 버튼을 클릭합니다.
  3. “Lambda@Edge 함수 연결” 섹션으로 이동합니다.
  4. 전송 대상이 될 이벤트에 Lambda 함수를 연결합니다. (예: “기본 캐시 동작 구성”에 “Viewer Request” 이벤트에 Lambda 함수 연결)
  5. 설정 변경 사항을 저장하고 CloudFront 배포를 업데이트합니다.

이제 CloudFront가 요청을 받을 때마다 Lambda 함수가 실행되어 캐싱 전략이 적용됩니다.

결론

본 블로그 포스트에서는 AWS Lambda와 CloudFront를 활용하여 캐싱 전략을 구현하는 방법을 알아보았습니다. 이를 통해 콘텐츠 전송 속도를 향상시키고, 웹 애플리케이션의 성능을 최적화할 수 있습니다.

AWS Lambda와 CloudFront는 강력한 조합으로, 다양한 기능을 구현할 수 있습니다. 더 많은 기능을 탐구하고, 애플리케이션의 성능을 향상시키기 위해 이들 서비스를 활용해 보시기 바랍니다.