앞서 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와 같은 외부 툴을 사용해야 합니다.
'AWS > ☁️ AWS' 카테고리의 다른 글
eb-cli을 이용한 EB 배포하기 (0) | 2020.08.15 |
---|---|
Elastic Beanstalk(EB)를 통한 배포 인프라 자동화 (0) | 2020.08.14 |
S3 버켓 정책 및 사용자 정책 (0) | 2020.07.11 |
인스턴스 스토어 사용 및 EBS와의 비교 (0) | 2020.07.11 |
EBS 스냅샷을 이용한 EBS 생성, AMI 생성, 리전 이동 (+ AMI) (0) | 2020.07.11 |