조건부 읽기로 메타데이터 기반 객체 검색·복사하기
조건부 읽기로 메타데이터 기반 객체 검색·복사하기
객체를 읽을 때 하나의 조건을 덧붙일 수 있다면, 객체를 가져올지 말지를 그 조건에 맡길 수 있어요. S3에는 조건부 읽기(conditional read)가 있어서 읽기 요청에 추가 헤더를 넣어 사전 조건(precondition)을 걸 수 있고, 그 조건이 맞지 않으면 읽기 요청은 실패하게 돼요. GET, HEAD, COPY 요청에 조건부 읽기를 사용하면 객체의 메타데이터를 기준으로 조건에 맞는 객체만 반환받을 수 있어요.
객체를 업로드하면 S3가 시스템 제어 메타데이터를 만드는데, 이건 S3만 수정할 수 있어요. ETag(엔티티 태그)와 Last-Modified(마지막 수정 시각)가 시스템 제어 메타데이터의 대표적인 예예요. 객체의 ETag는 특정 버전의 객체를 나타내는 문자열이고, Last-Modified는 객체 생성 날짜나 마지막 수정 날짜 중 더 최신인 쪽을 나타내는 메타데이터예요.
조건부 읽기를 쓰면 객체의 ETag나 Last-Modified 날짜를 기준으로 객체를 반환할 수 있어요. 요청에 ETag 값을 지정해 그 값이 일치할 때만 객체를 반환하도록 하면, 특정 버전의 객체만 가져오거나 복사하게 보장할 수 있어요. 읽기 요청에 Last-Modified 값을 지정하면, 객체가 여러분이 제공한 날짜 이후에 수정되었을 때만 반환받을 수도 있어요.
출처: 문서
본문
지원되는 API
다음 S3 API에서 조건부 읽기를 사용할 수 있어요.
엔티티 태그(ETag)나 마지막 수정 날짜를 기준으로 객체를 반환하려면 다음 헤더를 사용할 수 있어요. ETag, Last-Modified 같은 객체 메타데이터에 대한 자세한 내용은 시스템 정의 객체 메타데이터를 참고하세요.
GetObject
If-Match— 제공한 ETag와 일치할 때만 객체를 반환해요.If-Modified-Since— 지정한 시각 이후에 수정되었을 때만 객체를 반환해요.If-None-Match— 제공한 ETag와 일치하지 않을 때만 객체를 반환해요.If-Unmodified-Since— 지정한 시각 이후에 수정되지 않았을 때만 객체를 반환해요.
이 헤더들이 반환하는 오류와, 단일 요청에 여러 조건부 헤더가 있을 때 S3가 처리하는 순서에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 GetObject를 참고하세요.
HeadObject
If-Match— 제공한 ETag와 일치할 때만 객체를 반환해요.If-Modified-Since— 지정한 시각 이후에 수정되었을 때만 객체를 반환해요.If-None-Match— 제공한 ETag와 일치하지 않을 때만 객체를 반환해요.If-Unmodified-Since— 지정한 시각 이후에 수정되지 않았을 때만 객체를 반환해요.
이 헤더들이 반환하는 오류와, 단일 요청에 여러 조건부 헤더가 있을 때 S3가 처리하는 순서에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 HeadObject를 참고하세요.
CopyObject
x-amz-copy-source-if-match— 제공한 ETag와 일치할 때만 소스 객체를 복사해요.x-amz-copy-source-if-modified-since— 지정한 시각 이후에 수정되었을 때만 소스 객체를 복사해요.x-amz-copy-source-if-none-match— 제공한 ETag와 일치하지 않을 때만 소스 객체를 복사해요.x-amz-copy-source-if-unmodified-since— 지정한 시각 이후에 수정되지 않았을 때만 소스 객체를 복사해요.If-Match— 제공한 ETag와 일치할 때만 객체를 복사해요.If-Match는 ETag 값을 문자열로 기대해요.If-None-Match— 제공한 ETag와 일치하지 않을 때만 객체를 복사해요.If-None-Match는'*'(별표) 문자를 기대해요.
이 헤더들이 반환하는 오류와, 단일 요청에 여러 조건부 헤더가 있을 때 S3가 처리하는 순서에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 CopyObject를 참고하세요.
쓰기 작업 중 조건부 헤더를 이용해 덮어쓰기를 방지하는 방법은 조건부 쓰기로 객체 덮어쓰기 방지하기를 참고하세요.