2017-02-12 9 views
0

내가 작업하고있는 애플리케이션 (nodejs)에는 사용자 프로필이 있으며 각 프로필에는 여러 이미지가있을 수 있습니다. S3를 주 스토리지로 사용하고 CloudFront를 사용하여 배포합니다.Amazon S3에서 이미지를 저장하고 CloudFront를 사용하여 이미지를 배포하는 가장 좋은 방법

가끔은 사용자가 큰 이미지를 업로드하는 경우가 있습니다. 내가하고 싶은 일은 주로 성능 때문에 이미지를 다운로드 할 때 (HTML img 태그 또는 휴대 전화에서 볼 때) 크기를 조정하는 것입니다.

이미지를 S3로 업로드하기 전에 (아마 lwip https://github.com/EyalAr/lwip을 사용하여) 이미지를 스케일해야할지 모르거나 CloudFront를 통해 이미지를 저울질하거나 이미지를 저화하는 방법이 있습니까? 나는 CloudFront가 Gzip을 사용하여 파일을 압축 할 수 있지만 이미지에는 권장하지 않는다는 것을 읽었습니다.

저장 용량으로 인해 크기 조정 + 원본 이미지를 S3에 업로드하고 싶지 않습니다.

클라이언트, 서버 또는 S3에서 수행해야합니까? 그것을하는 가장 좋은 방법은 무엇입니까?

답변

2

CloudFront를 통해 이미지를 다운로드 할 때 이미지를 축소하거나 저품질 이미지를 얻는 방법이 있습니까?

이와 같은 기능은 없습니다. 이미지의 크기를 조정하거나, 다시 샘플링하거나, 크기를 조정하거나, 압축하는 등의 작업을 수행하려면 이미지를 S3의 마지막 위치에 저장하기 전에 이미지를 필요로합니다.

S3에서 최종 위치라고 말합니다.

한 가지 해결책은 S3의 중간 위치 위치 (아마도 다른 버킷)에 이미지를 업로드 한 다음 이미지를 수정하고 최종 S3 위치에 저장하는 코드로 크기를 조정하여 CloudFront에서 가져올 때입니다. 다운로드 사용자를 대신하여

나는 CloudFront가 Gzip을 사용하여 파일을 압축 할 수 있지만 이미지에는 권장하지 않는다고 읽었습니다.

이미지는 gzip 압축에서 거의 혜택을하지만, CloudFront를 문서는 경향이 CloudFront doesn't compress anything that isn't in some way formatted as text이, gzip 압축에서 더 많은 혜택을 나타냅니다.

저장 용량 때문에 크기가 조정 된 원본 이미지를 S3에 업로드하고 싶지 않습니다.

본인은 귀하의 실수라고 생각합니다.

"압축"이미지는 압축 파일을 압축하는 것과는 다릅니다. 이미지 압축은 손실이 있습니다입니다. 정의에 따라 여기에서 논의 된 이미지 압축은 이미지의 의도적 인 폐기 정보이므로 크기가 원하는 범위 내에 있고 품질이 허용 범위 내에있는 시점이기 때문에 압축 된 버전에서 원본 이미지를 재구성 할 수 없습니다 . 이미지 압축은 과학이자 예술입니다. 원본 이미지를 유지하지 않고 나중에 이미지 압축 알고리즘을 수정하기로 결정한 경우 (나중에 크기가 너무 크다고 판단하거나 원래 알고리즘이 너무 공격적이어서 결정할 수 없기 때문에) 품질)을 사용하면 압축 알고리즘을 통해 이미 압축 된 이미지를 품질 손실없이 다시 실행할 수 없습니다.

S3의 STANDARD_IA ("자주 사용하지 않는") 저장 클래스를 사용하면 원본 이미지의 저장 비용을 절반으로 줄일 수 있습니다. 더 비싼 다운로드와 교환하여 이러한 이미지는 거의 다운로드되지 않습니다. 버킷에있는 URL을 저장합니다.

클라이언트, 서버 또는 S3에서 수행해야합니까?

S3에 "개체"만 저장하기 때문에 S3에서 "in"할 수 없습니다. 그것은 그들을 조작하지 않습니다.

두 가지 옵션이 있지만 서버에서이를 수행하는 데는 여러 가지 옵션이 있습니다.

"서버"라고 말하면 웹 서버를 생각할 것입니다. 이는 하나의 옵션이지만이 프로세스는 리소스를 많이 차지할 수 있으므로 확장 성 계획에서이를 고려해야합니다.

this one과 같은 GitHub 프로젝트는 필요에 따라 "서버리스 (serverless)"코드 실행을 제공하는 AWS Lambda를 사용하여 설계되었습니다. 이 코드는 서버에서 실행되지만 구성하거나 유지 관리해야하거나 사용하지 않을 때 비용을 지불해야하는 서버는 아닙니다. Lambda는 100 밀리 초 단위로 청구됩니다. 두 번째 옵션입니다.

클라이언트에서 사용하는 것은 물론 선택의 여지가 있지만 잠재적으로 문제가 많고 오류가 발생하기 쉬운 것으로 보이며 일부 솔루션은 플랫폼에 따라 달라질 수 있습니다.

이 작업을 수행하는 데 "최선의"방법이 없습니다.

EXIF ​​메타 데이터에 익숙하지 않은 사용자는 EXIF ​​메타 데이터를 잘 알고 있어야합니다. 리샘플링/크기 조정 외에도 사용자가 제공하지 않은 민감한 데이터 (예 : GPS가 사진의 위치 좌표와 같은 이미지에 표시됨)가 드러나지 않도록 사용자 제공 이미지의 일부 메타 데이터를 제거해야 할 수도 있습니다. 찍은. 일부 사이트는 사용자가 제출 한 이미지를 워터 마크로 찍어서 동시에 처리 할 수도 있습니다.

+1

매우 유익하고 상세합니다! 좋은 대답, upvoted. –

+0

나는 나의 질문을 편집했다, 나는 방법이 거기에있다라고 묻고 싶었다. 대단히 감사합니다. 훌륭한 답변입니다. –

+0

@ IbraheemAl-Saady 감사합니다. 귀하의 편집 내용과 일치하는 질문에서 내 견적을 업데이트했습니다. –