TIL

PresignedURL S3 - Lambda image Resizing

김영재0412 2023. 1. 15. 23:15

우린 사진 업로드를 multer로 하지않고 PresignedURL로 구현하였다. 그 이유는 이미지를 받는거 자체가 크기가 있다보니 서버가 그만큼 일해야하기에 서버에서 그 이미지를 직접 받지않는 방법을 찾아봤고 그 결과 PresignedURL이 가장 적합하다 라는 결과가 나왔다.

 

리사이징의 이유는 보통 사진 용량이 2~3메가 정도되는데 우린 유저이미지로 쓰기에 사진 크기가 그렇게 클 이유가 없다. 더군다나 이미지의 크기가 큰만큼 가져오는데 느려짐으로 크기를 줄여 좀 더 빠르게 가져올 수 있게 리사이징 해주기로 하였다.

 

먼저, 프론트가 백한테 PresignedURL을 요청하면 백은 유효기간이 정해진 PresignedURL을 발급해준다. 그러면 프론트는 그 URL로 put 요청으로 사진을 담아보내면 직접 S3에 업로드 되는 방식이다.

저기서 Key는 s3에 올라갈 파일이름이고 Expires는 유효시간이다. 만약 유효시간이 지나서 올릴려고 하면 권한없다라고 뜬다. 그 후에 사진이 버킷에 올라가면 이벤트가 실행되어 람다가 실행된다.

먼저, event에 s3버킷과 파일에 정보가 담겨오는데 나는 RESIZE로 할당된 폴더에 사진을 저장하기위해 바꿔주었고 get으로 해당하는 버킷에서 올라온 파일을 가져온 뒤 sharp으로 리사이징을 하고 put으로 다시 넣어준다. 이러면 리사이징이 된 파일이 잘 업로드가 된다.

 

여기서 하나 문제가 생겼었는데 한글이름으로 s3에 올리니 s3에는 잘 들어왔지만 이벤트로 가져올 땐 한글이 깨져서 들어왔고 key를 찾을 수 없다는 에러가 나왔다. 그래서 이벤트를 가져올 때 키값을 디코딩을 해줘서 한글을 디코딩해줘 key값을 잘 찾는 것을 확인할 수 있었다.

'TIL' 카테고리의 다른 글

AWS API Gateway 권한  (0) 2023.01.29
Simple & Easy Notification Service + AWS lambda  (0) 2023.01.22
nodemailer + AWS lambda  (0) 2023.01.04
github actions deploy to ecs  (0) 2022.12.25
CORS  (0) 2022.12.18