객체 메타데이터 작업
객체 메타데이터 작업
Amazon S3는 객체에 메타데이터를 붙이는 여러 방법을 제공해요. Annotation은 전용 API 작업으로 최대 1MB의 풍부한 데이터 페이로드를 객체에 붙일 수 있게 해줘요. 객체 태그는 객체를 분류하고 접근을 제어하기 위한 키-값 쌍이에요. 업로드 시점에 사용자 정의 메타데이터를 설정할 수도 있고, Amazon S3가 시스템 정의 메타데이터를 자동으로 유지해요.
객체를 만들 때 객체 키(또는 키 이름)를 지정하며, 이는 버킷에서 객체를 고유하게 식별해요. 업로드 시점에 사용자 정의 메타데이터도 설정할 수 있어요.
업로드 후에는 이 사용자 정의 메타데이터를 수정할 수 없어요. 수정하는 유일한 방법은 객체 복사본을 만들어 메타데이터를 설정하는 거예요.
출처: 문서
본문
사용자 지정 객체 메타데이터 (Custom object metadata)
사용자 지정 객체 메타데이터는 내가 제어하는 메타데이터예요. 애플리케이션에 의미 있는 객체 정보를 저장하는 데 사용할 수 있어요. Amazon S3는 annotation, 객체 태그, 사용자 정의 메타데이터의 세 가지 사용자 지정 메타데이터 유형을 지원해요.
Annotation — 업로드 후 어떤 Amazon S3 객체에든 붙일 수 있는 이름이 있는 데이터 페이로드예요. 각 annotation은 AI 생성 출력, 분류 결과, 처리 기록 같은 최대 1MB의 UTF-8 텍스트를 저장할 수 있어요. 객체 자체를 수정하지 않고 annotation을 생성·검색·나열·삭제할 수 있어요.
객체 태그 (Object tags) — 객체를 분류·정리·접근 제어하는 데 사용할 수 있는 키-값 쌍이에요. 각 객체에는 최대 10개의 태그를 붙일 수 있어요. IAM·버킷 정책, S3 Lifecycle 규칙, 비용 할당 보고서에서 태그를 사용할 수 있어요.
사용자 정의 메타데이터 (User-defined metadata) — 객체를 업로드할 때 객체에 메타데이터를 지정할 수 있어요. 객체를 만드는 PUT 또는 POST 요청을 보낼 때 이 선택적 정보를 이름-값(키-값) 쌍으로 제공해요.
REST API로 객체를 업로드할 때, 사용자 정의 메타데이터 이름은 다른 HTTP 헤더와 구분되도록 x-amz-meta-로 시작해야 해요. REST API로 객체를 검색하면 이 접두사가 반환돼요. SOAP API로 업로드할 때는 접두사가 필요하지 않지만, SOAP API로 검색하면 접두사가 제거돼요.
참고: Amazon S3용 SOAP API는 신규 고객에게 제공되지 않으며 2025년 8월 31일에 수명 종료(EOL)를 앞두고 있어요. REST API나 AWS SDK를 사용할 것을 권장해요.
REST API로 메타데이터를 검색할 때 Amazon S3는 같은 이름의 헤더(대소문자 무시)를 쉼표로 구분된 목록으로 결합해요. 일부 메타데이터에 출력 불가능한 문자가 있으면 반환되지 않고, 대신 x-amz-missing-meta 헤더에 출력 불가능한 메타데이터 항목 수가 반환돼요. HeadObject 작업은 객체 자체를 반환하지 않고 메타데이터만 검색해요. 객체의 메타데이터에만 관심이 있을 때 유용해요. HEAD를 사용하려면 객체에 대한 READ 권한이 있어야 해요.
사용자 정의 메타데이터는 키-값 쌍의 집합이며, Amazon S3는 사용자 정의 메타데이터 키를 소문자로 저장해요. 메타데이터 값에는 임의의 Unicode 문자를 사용할 수 있어요. 값 표시와 관련된 문제를 피하려면 REST에서는 US-ASCII 문자를, POST를 통한 SOAP 또는 브라우저 기반 업로드에서는 UTF-8을 사용하는 것이 좋아요.
비 US-ASCII 문자를 메타데이터 값에 사용할 때, 제공된 Unicode 문자열에서 비 US-ASCII 문자가 검사돼요. 이런 헤더의 값은 저장 전에 RFC 2047에 따라 문자 디코딩되고, 반환 전에 메일 안전하게 RFC 2047로 인코딩돼요. 문자열에 US-ASCII 문자만 있으면 그대로 표시돼요.
예시:
PUT /Key HTTP/1.1
Host: amzn-s3-demo-bucket.s3.amazonaws.com
x-amz-meta-nonascii: ÄMÄZÕÑ S3
HEAD /Key HTTP/1.1
Host: amzn-s3-demo-bucket.s3.amazonaws.com
x-amz-meta-nonascii: =?UTF-8?B?w4PChE3Dg8KEWsODwpXDg8KRIFMz?=
PUT /Key HTTP/1.1
Host: amzn-s3-demo-bucket.s3.amazonaws.com
x-amz-meta-ascii: AMAZONS3
HEAD /Key HTTP/1.1
Host: amzn-s3-demo-bucket.s3.amazonaws.com
x-amz-meta-ascii: AMAZONS3
참고: PUT 요청 헤더는 8KB로 제한돼요. PUT 요청 헤더 안에서 사용자 정의 메타데이터는 2KB로 제한돼요. 사용자 정의 메타데이터의 크기는 각 키와 값의 UTF-8 인코딩 바이트 수의 합으로 측정돼요.
업로드된 후 객체 복사본을 만들어 수정하고 이전 객체를 교체하거나 새 버전을 만들어 메타데이터를 변경하는 방법은 콘솔의 "객체 메타데이터 편집" 문서를 참고하세요.
S3 Metadata 사용 — S3 객체의 메타데이터를 쉽게 찾고, 저장하고, 조회하려면 S3 Metadata를 사용할 수 있어요. S3 Metadata를 사용하면 비즈니스 분석, 콘텐츠 검색, AI/ML 모델 학습 등에 쓸 데이터를 빠르게 준비할 수 있어요. S3 Metadata는 일반 목적 버킷의 객체 메타데이터를 자동으로 캡처해 읽기 전용의 완전 관리형 Apache Iceberg 테이블에 저장해 데이터 검색을 가속화해요. 이 읽기 전용 테이블을 메타데이터 테이블이라고 해요. S3 Metadata는 시스템 정의 메타데이터(생성 시간, 스토리지 클래스 등)와 사용자 지정 메타데이터(태그, 사용자 정의 메타데이터, annotation)를 제공하며, 객체가 업데이트되거나 삭제될 때의 이벤트 메타데이터와 요청한 AWS 계정도 제공해요. 메타데이터 테이블은 탭형 데이터에 최적화된 S3 table bucket에 저장되며, Amazon Athena, Amazon Redshift, Amazon QuickSight 같은 AWS 분석 서비스와 통합해 조회할 수 있어요.
시스템 정의 객체 메타데이터 (System-defined object metadata)
버킷에 저장된 각 객체에 대해 Amazon S3는 시스템 메타데이터 집합을 유지해요. 시스템 제어(예: 객체 생성 날짜 — Amazon S3만 변경 가능)와 사용자 제어(예: 객체에 구성된 스토리지 클래스, 서버 측 암호화 활성화 여부)의 두 범주가 있어요. 웹사이트로 구성된 버킷에서 페이지 리다이렉트 값도 제어할 수 있는 시스템 메타데이터로 저장돼요.
참고: PUT 요청 헤더는 8KB로 제한되며, 그 안의 시스템 정의 메타데이터는 2KB로 제한돼요.
시스템 정의 메타데이터 목록과 수정 가능 여부:
| 이름 | 설명 | 사용자가 값을 수정할 수 있나요? |
|---|---|---|
| Date | 현재 날짜와 시간. | 아니요 |
| Cache-Control | 캐싱 정책을 지정하는 일반 헤더 필드. | 예 |
| Content-Disposition | 객체 표시 정보. | 예 |
| Content-Encoding | 객체 데이터에 적용된 콘텐츠 인코딩(압축 등). | 예 |
| Content-Length | 바이트 단위 객체 크기. | 아니요 |
| Content-Type | 객체 유형. | 예 |
| Last-Modified | 객체 생성 날짜 또는 마지막 수정 날짜 중 최신. 멀티파트 업로드의 경우 멀티파트 업로드 시작 날짜. | 아니요 |
| ETag | 객체의 특정 버전을 나타내는 엔티티 태그(ETag). 멀티파트 업로드가 아니고 암호화되지 않았거나 SSE-S3로 암호화된 객체의 ETag는 데이터의 MD5 다이제스트. | 아니요 |
| x-amz-server-side-encryption | 객체에 서버 측 암호화가 활성화되었는지, SSE-KMS인지 SSE-S3인지 나타내는 헤더. | 예 |
| x-amz-checksum-crc64nvme, x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-sha1, x-amz-checksum-sha256 | 객체의 체크섬 또는 다이제스트를 담는 헤더. 지시한 체크섬 알고리즘에 따라 한 번에 최대 하나의 헤더만 설정. | 아니요 |
| x-amz-checksum-type | 파트 수준 체크섬을 결합해 멀티파트 객체의 객체 수준 체크섬을 만드는 방법을 결정하는 체크섬 유형. | 예 |
| x-amz-version-id | 객체 버전. 버킷에서 버전 관리를 활성화하면 Amazon S3가 버킷에 추가된 객체에 버전 ID를 할당. | 아니요 |
| x-amz-delete-marker | 객체가 삭제 마커인지 나타내는 부울 마커. 버전 관리가 활성화된 버킷에서만 사용. | 아니요 |
| x-amz-storage-class | 객체 저장에 사용되는 스토리지 클래스. | 예 |
| x-amz-website-redirect-location | 관련 객체에 대한 요청을 같은 버킷의 다른 객체 또는 외부 URL로 리다이렉트하는 헤더. | 예 |
| x-amz-server-side-encryption-aws-kms-key-id | 객체를 암호화하는 데 사용된 AWS KMS 대칭 암호화 키의 ID를 나타내는 헤더. x-amz-server-side-encryption 헤더가 aws:kms 값일 때만 사용. |
예 |
| x-amz-server-side-encryption-customer-algorithm | 고객 제공 암호화 키(SSE-C)를 사용한 서버 측 암호화가 활성화되었는지 나타내는 헤더. | 예 |
| x-amz-tagging | 객체의 태그 세트. URL 쿼리 파라미터로 인코딩되어야 함. | 예 |