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

멀티파트 업로드 개요

멀티파트 업로드 API를 사용하면 대형 객체를 여러 개로 나누어 업로드할 수 있습니다. 이 API를 사용하여 새 대형 객체를 업로드하거나 기존 객체의 복사본을 만들 수 있습니다(객체 관련 작업 참조).

멀티파트 업로드는 3단계 프로세스입니다. 업로드를 시작한 후 각 부분별로 객체를 업로드하여 모두 업로드되면 멀티파트 업로드를 완료합니다. Amazon S3에 멀티파트 업로드 완료 요청이 전송되면 버킷의 다른 객체와 같이 이 객체에 액세스할 수 있도록 업로드된 각 부분을 모아 완전한 객체를 구성합니다.

진행 중인 모든 멀티파트 업로드 작업의 목록 또는 특정 멀티파트 업로드에 대해 업로드한 부분의 목록을 확인할 수 있습니다. 다음 단원에서 이러한 각 작업에 대해 자세히 설명합니다.

멀티파트 업로드 시작

멀티파트 업로드 시작 요청을 전송하면 Amazon S3가 멀티파트 업로드에 대한 고유 식별자인 업로드 ID와 함께 응답을 반환합니다. 파트 업로드, 부분 목록 확인, 업로드 완료 또는 업로드 중단 요청 시 항상 이 업로드 ID를 포함해야 합니다. 업로드할 객체에 메타데이터를 제공하려는 경우 멀티파트 업로드 시작 요청에서 메타데이터를 제공해야 합니다.

파트 업로드

부분을 업로드할 때 업로드 ID와 함께 부분 번호를 지정해야 합니다. 1부터 10,000까지 부분 번호를 지정할 수 있습니다. 부분 번호를 사용하여 업로드하는 객체에서 각 부분과 그 위치를 고유하게 식별합니다. 부분 번호는 굳이 연속 시퀀스로 선택할 필요가 없습니다(예를 들면 1, 5 및 14를 선택해도 됩니다). 이전에 업로드한 부분과 동일한 부분 번호로 새 부분을 업로드할 경우 이전에 업로드한 부분을 덮어쓰게 됩니다. 부분을 업로드할 때마다 Amazon S3는 그 응답으로 ETag 헤더를 반환합니다. 각 파트 업로드에 대해 부분 번호와 ETag 값을 기록해야 합니다. 이후 멀티파트 업로드를 완료하기 위한 요청에 이러한 값을 포함해야 하기 때문입니다.

참고

멀티파트 업로드를 시작하여 하나 이상의 부분을 업로드한 후 멀티파트 업로드를 완료하거나 중단해야 업로드된 부분의 스토리지 비용이 청구되지 않습니다. 멀티파트 업로드를 완료 또는 중단한 후에만 Amazon S3가 부분 스토리지를 비우고 부분 스토리지에 대한 비용 청구를 중단합니다.

멀티파트 업로드 완료(또는 중단)

멀티파트 업로드를 완료하면 Amazon S3는 부분 번호를 바탕으로 오름차순으로 각 부분을 결합하여 객체를 완성합니다. 멀티파트 업로드 시작 요청에서 객체 메타데이터가 제공된 경우 Amazon S3는 객체에 해당 메타데이터를 포함시킵니다. 성공적으로 완료 요청이 수행되면 부분은 더 이상 존재하지 않습니다. 멀티파트 업로드 완료 요청에는 업로드 ID와 각 부분 번호 및 해당 ETag 값의 목록이 포함되어야 합니다. Amazon S3 응답에는 결합된 객체 데이터를 고유하게 식별하는 ETag가 포함됩니다. 이 ETag가 객체 데이터의 MD5 해시가 될 필요는 없습니다. 필요할 경우 멀티파트 업로드를 중단할 수 있습니다. 멀티파트 업로드를 중단한 후에는 해당 업로드 ID로 다시 부분을 업로드할 수 없습니다. 중단된 멀티파트 업로드의 부분이 소비하는 모든 스토리지는 다시 비워집니다. 파트 업로드가 진행 중일 때 멀티파트 업로드를 중단해도 이 업로드가 계속 수행될 수 있습니다. 따라서 각 부분에서 사용하고 있는 스토리지를 모두 비우려면 모든 파트 업로드가 완료된 후에 멀티파트 업로드를 중단해야 합니다.

멀티파트 업로드 나열

특정 멀티파트 업로드 또는 진행 중인 모든 멀티파트 업로드에 대해 부분 목록을 확인할 수 있습니다. 파트 목록 조회 작업은 특정 멀티파트 업로드에 대해 업로드한 부분의 정보를 반환합니다. 각 파트 목록 조회 요청에 대해 Amazon S3는 특정 멀티파트 업로드에서 최대 1,000개의 부분에 대해 부분 정보를 반환합니다. 멀티파트 업로드에서 1,000개 이상의 부분이 있을 경우 모든 부분을 검색하려면 파트 목록 조회 요청을 여러 번 반복해야 합니다. 반환된 부분 목록에는 업로드가 완료되지 않은 부분은 포함되지 않습니다. 멀티파트 업로드 나열 작업을 사용하여 진행 중인 멀티파트 업로드의 목록을 확인할 수 있습니다. 진행 중인 멀티파트 업로드는 시작했지만 아직 완료 또는 중단하지 않은 업로드입니다. 각 요청은 최대 1,000개의 멀티파트 업로드를 반환합니다. 진행 중인 멀티파트 업로드가 1,000개 이상일 경우 남은 멀티파트 업로드를 모두 검색하려면 추가 요청을 전송해야 합니다. 반환된 목록은 확인을 위해서만 사용합니다. 멀티파트 업로드 완료 요청을 전송할 때 이 나열 결과를 사용할 수 없습니다. 대신 부분을 업로드할 때 지정한 부분 번호 및 Amazon S3가 반환한 해당 ETag 값의 목록을 보관해야 합니다.

동시 멀티파트 업로드 작업

분산 개발 환경에서는 애플리케이션에서 한 객체에 대해 동시에 여러 업데이트를 시작할 수 있습니다. 애플리케이션은 동일한 객체 키를 사용하여 여러 멀티파트 업로드를 시작할 수 있습니다. 이러한 각 업로드에 대해 애플리케이션은 부분을 업로드한 다음 Amazon S3가 객체를 생성하도록 업로드 완료 요청을 전송할 수 있습니다. 버킷에서 버전 관리를 사용할 경우 멀티파트 업로드를 완료하면 항상 새 버전이 생성됩니다. 버전 관리를 사용하지 않은 버킷의 경우 멀티파트 업로드의 시작 및 완료 중간에 전송된 다른 요청을 우선 수행할 수 있습니다.

참고

멀티파트 업로드의 시작 및 완료 중간에 전송된 다른 요청을 우선 수행할 수 있습니다. 예를 들어 특정 키를 사용하여 멀티파트 업로드를 시작한 후 업로드가 완료되기 전에 다른 작업에서 해당 키를 삭제한 경우 객체가 없어도 멀티파트 업로드 완료 요청에 대해 객체 생성에 성공했다고 응답할 수 있습니다.

멀티파트 업로드 및 요금

멀티파트 업로드가 시작되면 Amazon S3는 업로드가 완료되거나 중단될 때까지 모든 부분을 계속 보존합니다. 수명 주기가 끝날 때까지 이 멀티파트 업로드와 관련 부분의 모든 스토리지, 대역폭 및 요청에 대해 비용이 청구됩니다. 멀티파트 업로드를 중단하면 Amazon S3가 업로드 결과 및 업로드된 모든 부분을 삭제하므로 더 이상 비용이 청구되지 않습니다. 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하십시오.

버킷 수명 주기 정책을 사용한 미완료 멀티파트 업로드 중단

멀티파트 업로드를 개시한 후에 부분 업로드를 시작합니다. Amazon S3는 이 부분들을 저장하지만, 그 부분들을 모두 업로드하고 멀티파트 업로드를 완료하라는 successful 요청을 보낸 후에만 부분들로부터 객체를 생성합니다(멀티파트 업로드를 완료하라는 요청이 성공했는지 확인해야 합니다). 완전한 멀티파트 업로드 요청을 수신하자마자 Amazon S3는 부분들을 결합해 객체를 생성합니다.

완전한 멀티파트 업로드 요청을 성공적으로 전송하지 못하면, Amazon S3는 부분들을 결합하지 않고 어떤 객체도 생성하지 않을 것입니다. 따라서 부분들은 Amazon S3에 그대로 남게 되고 Amazon S3에 저장된 부분들에 대해서는 요금이 청구됩니다. 모범 사례로, 저장 비용을 최소화하도록 수명 주기 규칙(AbortIncompleteMultipartUpload 작업 사용)을 구성할 것을 권장합니다.

이제 Amazon S3는 시작된 후 지정 일수 내에 완료되지 않은 멀티파트 업로드를 중단하도록 Amazon S3에게 지시하는 데 사용할 수 있는 버킷 수명 주기 규칙을 지원합니다. 멀티파트 업로드가 시간 주기 내에 완료되지 않은 경우, 중단 작업을 할 수 있는 조건이 되어 Amazon S3는 멀티파트 업로드를 중단합니다(그리고 멀티파트 업로드에 연결된 부분들을 삭제합니다).

다음은 AbortIncompleteMultipartUpload 작업으로 규칙을 지정하는 수명 주기 구성의 예시입니다.

Copy
<LifecycleConfiguration> <Rule> <ID>sample-rule</ID> <Prefix></Prefix> <Status>Enabled</Status> <AbortIncompleteMultipartUpload> <DaysAfterInitiation>7</DaysAfterInitiation> </AbortIncompleteMultipartUpload> </Rule> </LifecycleConfiguration>

예시에서 규칙은 Prefix 요소(객체 키 이름 접두사)의 값을 지정하지 않으므로 멀티파트 업로드를 시작한 버킷의 모든 객체에 적용됩니다. 시작되었으나 7일 이내에 완료되지 않은 모든 멀티파트 업로드는 중단 작업의 조건을 갖추게 됩니다(중단 작업은 완료된 멀티파트 업로드에는 영향을 미치지 않습니다).

버킷 수명 주기 구성에 대한 자세한 내용은 객체 수명 주기 관리 단원을 참조하십시오.

참고

멀티파트 업로드가 규칙에 지정된 일수 내에 완료되면, AbortIncompleteMultipartUpload 수명 주기 작업은 적용되지 않습니다(즉 Amazon S3는 어떤 작업도 하지 않습니다). 또한 이 작업은 객체에 적용되지 않고, 어떤 객체도 이 수명 주기 작업에 의해 삭제되지 않습니다.

다음 put-bucket-lifecycle CLI 명령은 지정된 버킷에 수명 주기 구성을 추가합니다.

Copy
$ aws s3api put-bucket-lifecycle  \ --bucket bucketname  \ --lifecycle-configuration filename-containing-lifecycle-configuration

CLI 명령을 테스트하려면 다음과 같이 합니다.

  1. AWS CLI를 설치합니다. 지침은 AWS CLI 설치을 참조하십시오.

  2. 파일(lifecycle.json)에 다음과 같은 수명 주기 구성 예시를 저장합니다. 예시 구성에서는 빈 접두사를 지정하므로 버킷에 있는 모든 객체에 적용됩니다. 접두사를 지정하여 정책을 객체의 하위 집합으로 제한할 수 있습니다.

    Copy
    { "Rules": [ { "ID": "Test Rule", "Status": "Enabled", "Prefix": "", "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 7 } } ] }
  3. 다음 CLI 명령을 사용하여 버킷에서 수명 주기 구성을 설정합니다.

    Copy
    aws s3api put-bucket-lifecycle   \ --bucket bucketname  \ --lifecycle-configuration file://lifecycle.json
  4. 확인하려면 get-bucket-lifecycle CLI 명령을 사용해 수명 주기 구성을 조회합니다.

    Copy
    aws s3api get-bucket-lifecycle  \ --bucket bucketname
  5. 수명 주기 구성을 삭제하려면 delete-bucket-lifecycle CLI 명령을 사용합니다.

    Copy
    aws s3api delete-bucket-lifecycle \ --bucket bucketname