메뉴
Amazon Simple Storage Service
개발자 안내서 (API 버전 2006-03-01)

버전 관리를 사용하는 버킷의 객체 목록

이 단원에서는 버전 관리를 사용하는 버킷의 객체 버전을 나열하는 예제를 제공합니다. Amazon S3에서는 객체 버전 정보를 버킷에 연결된 versions 하위 리소스에 저장합니다(버킷 구성 옵션 참조).

콘솔 사용

Amazon S3 콘솔을 사용하여 객체 버전을 나열하는 방법에 대한 자세한 내용은 S3 객체의 버전을 보려면 어떻게 해야 합니까?(출처: Amazon Simple Storage Service 콘솔 사용 설명서)를 참조하십시오.

AWS SDK 사용

이 단원의 예제에서는 버전 관리를 사용하는 버킷에서 객체 목록을 가져오는 방법을 보여줍니다. 더 낮은 개수를 지정했더라도 각 요청에서는 최대 1,000개의 버전을 반환합니다. 버킷에 이 제한보다 더 많은 버전이 포함되어 있는 경우 일련의 요청을 보내 모든 버전 목록을 가져옵니다. "페이지"에 표시되는 이러한 결과 반환 프로세스를 페이지 매김이라고 합니다. 페이지 매김 작동 방식을 설명하기 위해 예제에서는 각 응답을 두 가지 객체 버전으로 제한합니다. 결과의 첫 페이지를 가져온 후 각 예제에서는 버전 목록이 잘렸는지 여부를 확인합니다. 잘린 경우 계속해서 모든 버전을 가져올 때까지 페이지를 가져옵니다.

참고

다음 예제 역시 버전 관리를 사용하지 않는 버킷이나 개별 버전이 없는 객체를 사용합니다. 이러한 경우 Amazon S3에서는 버전 ID null을 사용하여 버전 목록을 반환합니다.

다른 AWS SDK 사용에 대한 자세한 내용은 샘플 코드 및 라이브러리 단원을 참조하십시오.

AWS SDK for Java 사용

실제 예제를 작성 및 테스트하는 방법에 대한 자세한 내용은 Amazon S3 Java 코드 예제 테스트 단원을 참조하십시오.

import java.io.IOException; import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.ListVersionsRequest; import com.amazonaws.services.s3.model.S3VersionSummary; import com.amazonaws.services.s3.model.VersionListing; public class ListKeysVersioningEnabledBucket { public static void main(String[] args) throws IOException { String clientRegion = "*** Client region ***"; String bucketName = "*** Bucket name ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); // Retrieve the list of versions. If the bucket contains more versions // than the specified maximum number of results, Amazon S3 returns // one page of results per request. ListVersionsRequest request = new ListVersionsRequest() .withBucketName(bucketName) .withMaxResults(2); VersionListing versionListing = s3Client.listVersions(request); int numVersions = 0, numPages = 0; while(true) { numPages++; for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) { System.out.printf("Retrieved object %s, version %s\n", objectSummary.getKey(), objectSummary.getVersionId()); numVersions++; } // Check whether there are more pages of versions to retrieve. If // there are, retrieve them. Otherwise, exit the loop. if(versionListing.isTruncated()) { versionListing = s3Client.listNextBatchOfVersions(versionListing); } else { break; } } System.out.println(numVersions + " object versions retrieved in " + numPages + " pages"); } catch(AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch(SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }

Using the AWS SDK for .NET

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 Amazon S3 .NET 코드 예시 실행 단원을 참조하십시오.

using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class ListObjectsVersioningEnabledBucketTest { static string bucketName = "*** bucket name ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main(string[] args) { s3Client = new AmazonS3Client(bucketRegion); GetObjectListWithAllVersionsAsync().Wait(); } static async Task GetObjectListWithAllVersionsAsync() { try { ListVersionsRequest request = new ListVersionsRequest() { BucketName = bucketName, // You can optionally specify key name prefix in the request // if you want list of object versions of a specific object. // For this example we limit response to return list of 2 versions. MaxKeys = 2 }; do { ListVersionsResponse response = await s3Client.ListVersionsAsync(request); // Process response. foreach (S3ObjectVersion entry in response.Versions) { Console.WriteLine("key = {0} size = {1}", entry.Key, entry.Size); } // If response is truncated, set the marker to get the next // set of keys. if (response.IsTruncated) { request.KeyMarker = response.NextKeyMarker; request.VersionIdMarker = response.NextVersionIdMarker; } else { request = null; } } while (request != null); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }

REST API 사용

버킷에 있는 전체 객체의 버전을 모두 나열하려면 GET Bucket 요청에 versions 하위 리소스를 사용합니다. Amazon S3에서는 최대 1,000개의 객체만 가져올 수 있으며, 각 객체 버전은 각각 하나의 객체로 온전히 취급됩니다. 따라서 버킷에 두 개의 키(예: photo.gifpicture.jpg)가 포함되어 있고 첫 번째 키에 990개의 버전이, 두 번째 키에 400개의 버전이 있는 경우, 단일 요청으로는 photo.gif의 990개 버전 모드를 가져오고 picture.jpg의 최신 버전 10개만 가져오게 됩니다.

Amazon S3에서는 객체 버전을 객체가 저장된 순서대로 가장 최근에 저장된 것을 먼저 반환합니다.

버킷의 전체 객체 버전 목록을 보려면

  • GET Bucket 요청에 versions 하위 리소스를 포함합니다.

    GET /?versions HTTP/1.1 Host: bucketName.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 +0000 Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

버킷에서 객체의 하위 집합 가져오기

이 단원에서는 다음 두 가지 예제 시나리오를 다룹니다.

  • 예를 들어, 버킷에서 전체 객체 버전의 하위 집합을 가져오려는 경우 특정 객체의 전체 버전을 가져옵니다.

  • 응답의 객체 버전 수가 max-key의 값(기본값은 1,000)을 초과하므로 나머지 객체 버전을 가져오기 위한 두 번째 요청을 제출해야 합니다.

객체 버전의 하위 집합을 가져오려면 GET Bucket에 요청 파라미터를 사용합니다. 자세한 내용은 GET Bucket 단원을 참조하십시오.

예제 1: 특정 객체 하나의 전체 버전 가져오기

다음 프로세스에 따라 versions 하위 리소스와 prefix 요청 파라미터를 사용하여 객체의 전체 버전을 가져올 수 있습니다. prefix에 대한 자세한 내용은 GET Bucket 단원을 참조하십시오.

키의 전체 버전 가져오기

1 prefix 파라미터를 가져오려는 객체의 키에 설정합니다.
2

versions 하위 리소스 및 prefix를 사용하여 GET Bucket 요청을 보냅니다.

GET /?versions&prefix=objectName HTTP/1.1

예 접두사를 사용하여 객체 가져오기

다음 예제에서는 키가 myObject이거나 이렇게 시작하는 객체를 가져옵니다.

GET /?versions&prefix=myObject HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

기타 요청 파라미터를 사용하여 전체 객체 버전의 하위 집합을 가져올 수 있습니다. 자세한 내용은 GET Bucket 단원을 참조하십시오.

예제 2: 응답이 잘린 경우 추가 객체의 목록 가져오기

GET 요청에서 반환될 수 있는 객체 수가 max-keys 값을 초과한 경우, 응답에는 <isTruncated>true</isTruncated>가 포함되며 요청을 충족하지만 반환되지 않은 첫 번째 키와 첫 번째 버전 ID를 각각 NextKeyMarkerNextVersionIdMarker에 포함시킵니다. 그러한 반환된 값을 후속 요청의 시작 지점으로 사용하여 GET 요청을 충족하는 추가 객체를 가져옵니다.

다음 프로세스를 사용하여 버킷에서 GET Bucket versions 요청을 충족하는 추가 객체를 가져옵니다. key-marker, version-id-marker, NextKeyMarkerNextVersionIdMarker에 대한 자세한 내용은 GET Bucket 단원을 참조하십시오.

원본 GET 요청을 충족하는 추가 응답 가져오기

1 key-marker의 값을 이전 응답의 NextKeyMarker에서 반환된 키로 설정합니다.
2 version-id-marker의 값을 이전 응답의 NextVersionIdMarker에서 반환된 버전 ID로 설정합니다.
3 key-markerversion-id-marker를 사용하여 GET Bucket versions 요청을 보냅니다.

예 지정된 키 및 버전 ID로 시작하는 객체 가져오기

GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=