강민준
12
2022-04-28 21:40:09
1
87

lambda@Edge 이미지 용량제한(코린이)


안녕하세요, 백엔드 4주차 코린이입니다...

고수님들의 조언이 필요해서 글 쓰게 되었습니다....


현재 저는 AWS의 lambda@Edge와 CloudFront(CDN)을 통해

Image resizing 작업을 진행 중에 있습니다.

이제 성공적으로 모두 설정을 마쳤다고 생각하고 몇가지 테스트를 돌리던 도중

제가 생각했던 것 과는 다른 문제가 발생했습니다.


문제는 아래와 같습니다.

https://d11111111111.cloudfront.net/dev/test.jpg?w=200&h=200 (예시 URL)


위 request를 진행했을 때 만약 S3에 저장된 test.jpg 파일이 

1MB보다 작다면 해당 쿼리를 정상적으로 수행하고, 

1MB보다 크다면 503에러가 발생합니다.

또한 50KB 처럼 작은 파일을 크게 resizing 하여 1MB 보다 크게 만든다면 502 에러가 발생합니다.

크게 만들일은 거의 없지만,, 용량이 3~4MB하는 이미지 파일을

resizing 하여 client에 전달해야하는 상황입니다.


많은 분들(당근마켓 포함)은 Cloudfront <-> lambda@Edge 방식으로 

이미지 resizing을 수행하시는 것 같은데,

AWS 공식 문서를 맨 아래를 살펴보니 오리진

요청이 1MB 가 넘어가면 동작하지 않는다고 나와있었습니다.

또한 오리진 응답도 base64 인코딩의 경우 1.33MB 까지 라는 문서도 확인했었습니다.



다른 분들은 어떤 방식을 통해 수행 하셨을까요?

제가 찾은 lambda@Edge에서 동작하는

Node.js코드는 sharp를 통해 base64 encoding을 내부적으로 수행합니다. (코드참고)

base64에 대해서 살펴보니, 오히려 1MB 이상인 파일들은 base64 encoding을 수행하면

용량이 더 커지는 현상을 발견했고 이로서 현재 구성한

lmabda에 문제가 있는 것이 확실 시된 상황입니다ㅜㅜ


현재 저는 Spring으로 Application Server를 구동 중입니다.

( S3에 원본 이미지가 저장되도록요!)

S3에 pixel별로 이미지를 저장하는 방식은 가급적 피하고 있습니다.


따라서 위에 언급한 on-the-fly 방식을 통해서 image를 resizing 하고자 하는데,,

위 경우에는 어쩔 수 없이 S3에 용량이 가공된 파일이 저장되어야할까요?

CloudFront + Lambda@Edge로 Image resizing하시는 분들,, 자그마한 팁이라도 부탁드립니다!

0
  • 답변 1

  • 강민준
    12
    2022-04-29 02:03:44

    https://inventer.tistory.com/16

    해결하고 회고 남겼습니다. 다들 저 처럼 고생하지 마세요..

  • 로그인을 하시면 답변을 등록할 수 있습니다.