블로그 릴레이 - AWS Lambda Edge와 AWS CloudFront Functions에 대하여
안녕하세요! 클래스메소드의 이수재입니다.
본 블로그는 당사의 한국어 블로그 릴레이의 2025년 열한 번째 블로그입니다.
이번 블로그의 주제는「AWS Lambda Edge와 AWS CloudFront Functions에 대하여」입니다.
AWS CloudFront를 사용하다 보면 정적인 콘텐츠 전송뿐 아니라 사용자 요청이나 응답을 엣지에서 동적으로 처리하고 싶은 경우가 있습니다.
이를 가능하게 해주는 기능으로 Lambda@Edge와 CloudFront Functions가 있습니다.
두 기능은 CloudFront의 엣지 로케이션에서 실행되지만 설계 목적과 기능에서 차이가 있습니다.
이번 글에서는 어떤 기능인지, 장점과 활용 사례, 그리고 언제 어떤 기능을 도입해야 할지 알아보겠습니다.
AWS Lambda@Edge 란?
사용자에게 더 가까운 위치에서 코드 실행 - Lambda@Edge 소개 페이지
Lambda@Edge는 AWS의 서버리스 컴퓨팅 서비스인 Lambda를 CloudFront와 통합한 기능입니다.
엣지 로케이션에서 실행하기 때문에 애플리케이션의 사용자에게 더 가까운 위치에서 코드를 실행하여 성능을 개선하고 지연 시간을 단축할 수 있게 해 줍니다.
다음과 같은 CloudFront 이벤트가 발생할 때(=이벤트 소스) Lambda 함수를 실행할 수 있습니다.
- CloudFront가 최종 사용자의 요청을 수신할 때(최종 사용자 요청): 뷰어 요청(Viewer Request)
- CloudFront가 오리진에 요청을 전달하기 전(오리진 요청) : 오리진 요청(Origin Request)
- CloudFront가 오리진의 응답을 수신할 때(오리진 응답) : 오리진 응답(Origin Response)
- CloudFront가 최종 사용자에게 응답을 반환하기 전(최종 사용자 응답) : 뷰어 응답(Viewer Response)
따라서 어떤 소스에 반응하도록 할지 검토하고 간단한 코드를 실행시키는 식으로 사용합니다.
코드에 사용할 수 있는 언어는 Python과 node.js 입니다.
Lambda@Edge의 장점
Lambda@Edge를 도입하면 다음과 같은 장점이 있습니다.
- 지연 시간 감소 : 사용자와 가까운 엣지에서 로직을 처리해 오리진 서버로의 왕복을 줄입니다.
- 서버리스 : 서버 관리 없이 코드를 실행하며, 필요에 따라 자동으로 확장됩니다.
- 복잡한 로직 처리 : 최대 30초(오리진 관련 이벤트) 또는 5초(뷰어 관련 이벤트)까지 실행 가능하며, 외부 API 호출이나 DynamoDB 같은 데이터베이스 연동도 지원합니다.
- 글로벌 배포 : 전 세계 CloudFront 엣지 로케이션에 자동으로 배포되어 일관된 경험을 제공합니다.
사용 사례
보통 간단한 코드를 실행시키는데 사용하며 다음과 같은 사용 사례들이 있습니다.
- 동적 콘텐츠 생성 : 사용자 위치나 디바이스 정보를 기반으로 맞춤형 HTML을 생성하거나 A/B 테스트를 수행
- 이미지 리사이징, AB테스트, 리디렉션 등
- 오리진의 부하를 감소시키는 장점도 있습니다
- 보안 강화 : 요청에 인증 토큰(JWT)을 검증하거나 보안 헤더(예: HSTS, CSP)를 추가
- 워크플로우 연계 : 외부 서비스 호출(예: 결제 API)이나 데이터베이스 조회가 필요한 경우
예제는 공식 페이지를 참고해주세요.
고려할 점
Lambda@Edge를 도입할 때는 다음과 같은 사항을 고려해야 합니다.
- 배포 지연 시간
- Lambda@Edge는 코드 업데이트 시 전 세계 CloudFront 엣지 로케이션에 배포되는데, 이 과정이 수십 초에서 몇 분까지 걸릴 수 있습니다. 실시간 디버깅이나 빠른 변경 적용이 어려울 수 있으니, 배포 전 테스트를 권장합니다.
- 실행 시간 제한
- 뷰어 관련 이벤트는 5초, 오리진 관련 이벤트는 30초로 제한됩니다. 긴 작업(예: 대용량 파일 처리)은 불가능하니, 작업을 최적화하거나 오리진 서버로 분산 처리하는 방안을 고려해야 합니다.
- 비용 관리
- 요청 수와 실행 시간에 따라 비용이 증가합니다. 특히 트래픽이 많은 서비스에서는 비용이 빠르게 누적될 수 있으니 올바른 캐싱 설정을 통해 불필요한 호출을 줄이는 것이 중요합니다.
- 콜드 스타트의 영향
- Lambda와 마찬가지로 콜드 스타트가 발생할 수 있으므로 대응을 고려해야합니다.
- IAM 권한 설정
- Lambda@Edge는 외부 리소스(예: S3, DynamoDB)와 연동 시 적절한 IAM 역할이 필요합니다. 권한 누락으로 실행 실패가 발생할 수 있으니 배포 전 정책을 꼼꼼히 점검하는 것을 권장합니다.
CloudFront Functions 란?
더 짧은 지연 시간으로 엣지에서 코드 실행을 위한 신규 기능 - CloudFront Functions 블로그
CloudFront 전용으로 설계된 경량 스크립팅 플랫폼입니다.
JavaScript로 작성된 간단한 코드를 엣지에서 실행하며, Lambda@Edge보다 제한된 기능과 더 낮은 지연 시간을 제공합니다.
HTTP 헤더 조작, URL 다시 쓰기/리디렉션, 캐시 키 정규화와 같이 높은 확장성과 지연 시간에 민감한 작업에 적합합니다.
다음과 같은 CloudFront 이벤트가 발생할 때(=이벤트 소스) 함수를 실행할 수 있습니다.
- 최종 사용자 요청
- 최종 사용자 응답
Lambda@Edge와는 다르게 오리진 관련 처리는 불가능합니다.
CloudFront Functions의 장점
CloudFront Functions는 다음과 같은 장점이 있습니다.
- 초저지연: 1ms 미만의 밀리초 단위로 실행되며, 사용자 경험에 영향을 거의 주지 않습니다
- 비용 효율성: Lambda@Edge보다 훨씬 저렴하기 때문에 대규모 요청 처리에 적합합니다
- 간단한 관리: CloudFront 콘솔에서 직접 코드를 작성하고 배포할 수 있어 설정이 간편합니다.(=Lambda에서 별도의 함수를 작성할 필요가 없습니다)
- 대규모 처리: 모든 요청에 대해 빠르고 확장성 있게 적용 가능합니다.
사용 사례
간단한 처리를 하는데 적합한 특성을 이용하여 다음과 같은 사례에서 많이 사용됩니다.
- HTTP 헤더 조작: 모든 응답에 Cache-Control이나 X-Content-Type-Options 같은 헤더를 추가
- 캐시 키 최적화: 요청 URL에서 불필요한 쿼리 파라미터를 제거하거나 정규화해 캐시 히트율을 높임
- 간단한 리디렉션: 사용자 국가나 언어에 따라 다른 페이지로 리디렉션
- 기본 권한 부여: JWT 토큰의 유효성을 간단히 검사
고려 사항
CloudFront Function을 도입할 때는 다음과 같은 사항을 고려해야 합니다.
- 기능 제약
- 외부 네트워크 호출이나 복잡한 계산이 불가능합니다. 간단한 헤더 조작, URL 리라이트 등 경량 작업에만 적합하니, 요구사항이 이를 넘어서면 Lambda@Edge로 전환을 검토해야 합니다.
- 실행 시간 초과
- 최대 1ms 미만으로 제한되므로 코드가 지나치게 복잡하면 실행이 중단될 수 있습니다. JavaScript 코드의 성능을 미리 측정하고 최적화해야 합니다.
- 캐시 동작 이해
- CloudFront Functions는 캐시 키에 영향을 줄 수 있습니다. 예를 들어, URL을 수정하면 캐시 히트율이 변동될 수 있으니 캐싱 전략과 함수 로직을 일치시켜야 합니다.
- JavaScript 한계
- ECMAScript 5.1 기반으로 최신 JavaScript 기능(예: async/await)은 지원되지 않습니다. 코드 작성 시 구형 문법을 준수해야 하며, 최신 라이브러리 사용이 불가능합니다.
기능 비교
두 기능을 비교하는 내용은 공식 문서에도 기재되어 있습니다.
나름대로 정리한 내용을 여기에 기재하자면 다음과 같습니다.
비교 내용 | Lambda@Edge | CloudFront Functions |
---|---|---|
프로그래밍 언어 | Node.js, Python | JavaScript |
지원 이벤트 | 뷰어 요청/응답, 오리진 요청/응답 | 뷰어 요청/응답만 |
최대 실행 시간 | 30초 (오리진), 5초 (뷰어) | 1ms 미만 |
컴퓨팅 능력 | 높음 (외부 호출, 복잡한 계산 가능) | 낮음 (경량 작업만 가능) |
외부 네트워크 호출 | 가능 (DynamoDB, API 등) | 불가능 |
비용 | 실행 시간과 요청 수에 따라 높음 | 매우 저렴 (요청당 비용 저렴) |
설정 복잡도 | Lambda 함수 생성 및 IAM 역할 필요 | CloudFront 콘솔에서 바로 작성 |
배포 시간 | 수십 초~몇 분 (전역 배포 필요) | 즉시 적용 |
마무리
이상, 한국어 블로그 릴레이의 2025년 열한 번째 블로그「AWS Lambda Edge와 AWS CloudFront Functions에 대하여」편이었습니다. 다음 열두 번째 블로그 릴레이는 4월 넷째 주에 공개됩니다.
긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 must01940 지메일로 보내주시면 감사합니다.
참고 자료
Lambda@Edge
- 공통
- Lambda@Edge
- https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html
- https://aws.amazon.com/ko/blogs/networking-and-content-delivery/handling-redirectsedge-part1/
- https://dev.dwer.kr/2020/03/aws-lambdaedge-http-redirection.html
- https://akku-dev.tistory.com/156
- https://aws.amazon.com/ko/blogs/networking-and-content-delivery/lambdaedge-design-best-practices/
- https://aws.amazon.com/ko/blogs/networking-and-content-delivery/lambdaedge-design-best-practices/
- CloudFront Function
- 캐시 전략