AWS Lambda로 썸네일 생성하기

Traditional way

  • 상품이 연동되면 바로 썸네일을 만들어 S3에 올리는 방식.
  • 히트율이 낮다면 불필요하게 공간을 차지할 수 있음.
  • UI 개편으로 썸네일 크기가 변경되면 기존 썸네일을 모두 새로 생성해야 한다.
  • 하지만 간단하게 구현할 수 있다.

Lambda@Edge

  • 클라이언트가 요청하면 실시간으로 이미지를 리사이징해 제공하는 방식.
  • cdn에 이미지가 캐싱되기 전에는 리사이징 딜레이가 발생. (100ms → 500ms 정도?)
  • CloudFront의 origin-response와 viewer-request에 람다 함수를 연결한다.

image generation workflow

  • 클라이언트가 CloudFront에 이미지를 요청하면 CloudFront는 캐시된 썸네일이 있는지 체크한다.
  • 썸네일이 있으면 그대로 응답하고, 없으면 S3에서 이미지를 가져와 리사이징한다.
  • S3에 원본 이미지가 올라가 있어야 한다.

방금 갑자기 생각난 방법

  • 사용자가 이미지를 요청하면 CloudFront는 캐시된 썸네일이 있는지 체크한다.
  • 이미지가 있으면 그대로 응답, 없으면 S3에 해당 이미지가 있는지 확인한다.
  • S3에 이미지가 있으면 리사이징해 응답하고, 없으면 S3에 등록한 뒤 리사이징해 응답한다.
  • S3에 불필요한 이미지를 업로드하지 않으니까 비용 절감 효과가 있다.
  • 히트율이 높으면 그다지 메리트는 없을 것 같다.

참고자료

이 문서를 인용한 문서