본문으로 바로가기

S3 객체의 메타데이터 설정

category AWS/☁️ AWS 2020. 7. 12. 00:23
 

객체 키와 메타데이터 - Amazon Simple Storage Service

객체 키 이름이 마침표(.) 또는 2개의 마침표(..)로 끝나는 경우 Amazon S3 콘솔을 사용하여 객체를 다운로드할 수 없습니다. 키 이름이 "." 또는 ".."로 끝나는 객체를 다운로드하려면 AWS Command Line Inte

docs.aws.amazon.com

 

S3 객체에 메타데이터를 추가하려면 어떻게 해야 합니까? - Amazon Simple Storage Service

Amazon Simple Storage Service(Amazon S3)의 각 객체에는 해당 객체에 대한 메타데이터를 담은 이름-값 페어 세트가 있습니다. 메타데이터란 해당 객체에 대한 추가 정보입니다. Date, Content-Length 등 사용자��

docs.aws.amazon.com

 

 

앞서 s3 게임으로 s3 객체의 메타데이터를 가져온 바가 있습니다.

 

그 때 http 통신의 메타데이터와 S3 고유의 메타데이터(x-amz-로 시작 x-amz-meta-은 사용자가 정의할 수 있는 메타데이터를 의미함)가 존재함을 살펴본 바가 있습니다.

S3 이미지를 불러온 후 response 헤더를 살펴보니 x-amz 메타데이터가 있음을 확인할 수 있습니다.

 

 

 

객체 레벨에서 메타데이터를 설정함으로써 다양한 기능을 부여할 수 있습니다.

우선 객체-속성-메타데이터에서 설정할 수 있는 것이 무엇이 있는지를 살펴봅시다.

 

 

우선 기본적으로 Content-Type이 설정되어 있고, 새로 설정할 수 있는 메타데이터는 다음과 같습니다.

 

Cache-Control

 

캐시 컨트롤입니다. 지정한 초만큼 캐시해두었다가 캐시 이후에 다시 재로드합니다.

public, max-age=3600 값을 주어서 1시간 동안 캐싱 하도록 설정해보았습니다.

 

이 헤더에 대해서는 (https://www.zerocho.com/category/HTTP/post/5b594dd3c06fa2001b89feb9)를 참고합시다.

 

 

Content-Disposition

 

아, 이 헤더 때문에 고생한 기억이 나네요.

inline이면 다운로드하지 않고 브라우저 상에 보여줍니다.

이 값이 attachment면 파일을 그대로 보여주는 게 아니라 다운로드 합니다. 

파일 이름도 지정할 수 있습니다. 따로 파일 이름을 지정하지 않으면 기존의 파일 이름 그대로 저장합니다

Content-Disposition: attachment; filename='filename.csv'

 

그런데 이렇게 설정을 해도 특정 브라우저에서는 작동하지 않는 경우가 있습니다.

인터넷 익스플로러에서는 위와 같이 설정만 해줘도 다운로드합니다만 크롬에서는 inline처럼 그냥 보여주기만 할 뿐입니다. 이 경우 별도의 조치가 필요합니다.

 

 

Content-Encoding

 

데이터 인코딩 방식입니다. 아무래도 데이터를 압축하는 것이 중요하기 때문에 gzip을 가장 많이 사용합니다. 

이미지 (jpg, jpeg, png, webp 등)는 이미 압축이 된 상태이므로 gzip을 설정해도 별 차이가 없습니다. 이미지를 서빙하는 경우 굳이 설정하지 않아도 됩니다.

 

 

Content-Language : 텍스트로 된 파일이 있다면 언어를 지정할 수 있습니다.

 

 

Content-Type : 자동으로 설정됩니다. 확장자가 없는 파일일 경우 강제로 확장자를 지정할 수 있는데 가급적이면 애초에 파일의 확장자를 적어주는 것이 좋습니다.

 

 

Expires

 

cache-control과 비슷합니다만, 특정 날짜까지만 캐싱합니다. JWT 기반 토큰 설정을 할 때 사용해본 태그인데 해당 날짜가 지나면 아예 사용하지 못하게 막아버리는 용도로 사용합니다. 음... 지금은 토큰 기반 인증을 제외하고는 사용처를 모르겠네요

 

 

Website-Redirect-Location

 

s3 전용 메타데이터입니다. s3 정적 웹 호스팅을 하지 않을거라면 굳이 필요한가 모르겠습니다.

 

x-amz-meta-

 

s3 전용 메타데이터로, 사용자가 meta 이후에 마음대로 이름을 붙여서 사용할 수 있습니다.

 

 

다음과 같이 메타데이터를 만들고 response 헤더를 확인해보았습니다.

 

 

 

자, 그런데 의문은 이렇게 객체 수준의 메타데이터를 설정하는 것은 반복적인 작업이 될 수 있습니다.

이런 문제를 해결하기 위해서 버켓 수준에서 메타데이터를 설정할 수는 없을까요?

 

없습니다.

 

인터넷에서 찾아본 바로는 특정한 우회책을 써야 하는데

람다 펑션을 이용하거나 s3cmd와 같은 외부 툴을 사용해야 합니다.

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체