접두사를 사용한 객체 정리하기

접두사를 사용한 객체 정리하기

S3 버킷에 저장한 데이터를 정리하는 가장 기본적인 방법이 접두사(prefix) 예요. 접두사는 객체 키 이름의 시작 부분에 오는 문자열이고, 길이는 객체 키 이름의 최대 길이(1,024바이트) 안에서 자유롭게 정할 수 있어요. 디렉터리처럼 데이터를 정리하는 방법이라고 생각하면 쉬운데, 그래도 접두사는 디렉터리가 아니에요.

접두사로 검색하면 지정한 접두사로 시작하는 키만 결과에 남아요. 그리고 구분자(delimiter) 는 목록 작업이 공통 접두사를 공유하는 모든 키를 하나의 요약 목록 결과로 묶어주도록 해요.

Prefix와 Delimiter 매개변수의 목적은 키를 계층적으로 정리하고 탐색하게 해주는 거예요. 그러려면 먼저 여러분이 예상하는 키 이름에 나타나지 않는 구분자를 버킷용으로 정해요. 예를 들어 슬래시(/)를 쓰는 거예요. 슬래시(/) 문자가 특별해서가 아니라, 흔히 쓰는 접두사 구분자라서 그래요. 다른 문자도 구분자로 쓸 수 있어요. 그다음 계층의 각 레벨을 구분자로 분리해 연결하는 방식으로 키 이름을 구성하면 돼요.

예를 들어 도시 정보를 저장한다고 해볼게요. 자연스럽게 대륙, 그다음 나라, 그다음 주(province·state) 순으로 정리하고 싶을 거예요. 이런 이름들에는 보통 구두점이 없으니 구분자로 슬래시(/)를 쓰면 돼요. 다음 예시들이 슬래시(/) 구분자를 사용한 모습이에요.

  • Europe/France/Nouvelle-Aquitaine/Bordeaux
  • North America/Canada/Quebec/Montreal
  • North America/USA/Washington/Bellevue
  • North America/USA/Washington/Seattle

이런 식으로 전 세계 모든 도시의 데이터를 저장한다고 하면, 평평한 키 네임스페이스를 관리하는 건 정말 번거로워질 거예요. Prefix와 Delimiter를 목록 작업과 함께 쓰면 만든 계층을 그대로 활용해 데이터를 나열할 수 있어요. 예를 들어 USA의 모든 주를 나열하려면 Delimiter='/', Prefix='North America/USA/'로 설정하면 되고, 데이터가 있는 Canada의 모든 주를 나열하려면 Delimiter='/', Prefix='North America/Canada/'로 설정하면 돼요.

구분자, 접두사, 중첩 폴더에 대한 자세한 내용은 접두사와 중첩 폴더의 차이점을 참고하세요.

출처: 문서

본문

접두사와 구분자를 사용한 객체 나열

구분자와 함께 목록 요청을 보내면, 더 깊은 레벨에 (어쩌면 수백만 개나) 중첩된 키를 건너뛰고 요약하면서 계층을 한 레벨씩만 탐색할 수 있어요. 예를 들어 amzn-s3-demo-bucket이라는 버킷에 다음 키들이 있다고 해볼게요.

sample.jpg
photos/2006/January/sample.jpg
photos/2006/February/sample2.jpg
photos/2006/February/sample3.jpg
photos/2006/February/sample4.jpg

이 샘플 버킷의 루트 레벨에는 sample.jpg 객체만 있어요. 루트 레벨 객체만 나열하려면 슬래시(/) 구분자 문자와 함께 버킷에 GET 요청을 보내요. 그러면 S3는 / 구분자 문자를 포함하지 않는 sample.jpg 객체 키를 반환해요. 나머지 키들은 모두 구분자 문자를 포함하니까, S3는 이 키들을 묶어서 photos/라는 값을 가진 단일 CommonPrefixes 요소로 반환해요. photos/는 이 키들의 시작부터 지정한 구분자의 첫 번째 발생 지점까지의 부분 문자열이에요.

예시

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>amzn-s3-demo-bucket</Name>
  <Prefix></Prefix>
  <Marker></Marker>
  <MaxKeys>1000</MaxKeys>
  <Delimiter>/</Delimiter>
  <IsTruncated>false</IsTruncated>
  <Contents>
    <Key>sample.jpg</Key>
    <LastModified>2011-07-24T19:39:30.000Z</LastModified>
    <ETag>"d1a7fb5eab1c16cb4f7cf341cf188c3d"</ETag>
    <Size>6</Size>
    <Owner>
      <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
    </Owner>
    <StorageClass>STANDARD</StorageClass>
  </Contents>
  <CommonPrefixes>
    <Prefix>photos/</Prefix>
  </CommonPrefixes>
</ListBucketResult>

프로그래밍 방식으로 객체 키를 나열하는 방법은 프로그래밍 방식으로 객체 키 나열하기를 참고하세요.

더 알아보기 (Learn more)