복합 객체

만들기

이 페이지에서는 추가 객체 데이터를 전송하지 않고 기존 객체로부터 만드는 복합 객체에 대해 설명합니다. 복합 객체는 기존 객체에 추가하는 데 유용하며 동시에 여러 구성요소로 업로드한 객체를 다시 생성하는 데에도 유용합니다.

조합 작업

조합 작업은 주어진 소스 객체 시퀀스에 있는 데이터를 연결하여 복합 객체라는 새 객체를 만듭니다. 소스 객체는 모두 다음을 충족해야 합니다.

  • 동일한 스토리지 클래스를 포함해야 합니다.
  • 동일한 Cloud Storage 버킷에 저장되어 있어야 합니다.

조합을 수행할 때:

  • 소스 객체는 영향을 받지 않습니다.
  • 1~32개 사이의 소스 객체를 사용할 수 있습니다.
  • 소스 객체는 자체적으로 복합 객체일 수 있습니다.

조합한 결과 생성된 복합 객체:

  • 소스 객체와 동일한 스토리지 클래스를 갖습니다.
  • 나중에 소스 객체를 교체하거나 삭제해도 변경되지 않습니다.

gcloud storage를 사용해 객체 구성을 사용하는 경우 결과로 생성되는 객체의 Content-Type이 첫 번째 소스 객체의 Content-Type에 일치하도록 설정됩니다.

복합 객체 메타데이터

복합 객체의 메타데이터와 다른 객체의 메타데이터 간에는 몇 가지 차이점이 있습니다.

  • 복합 객체는 MD5 해시 메타데이터 필드를 포함하지 않습니다.

  • 복합 객체의 ETag 값은 MD5 해시를 기준으로 하지 않습니다. 그리고 클라이언트 코드는 HTTP/1.1의 IETF 사양에 따라 기본 객체가 변경될 때마다 변경된다는 것을 제외하고 복합 객체 ETag에 대해 어떤 것도 가정하지 않습니다.

  • 각 복합 객체에는 복합 객체 내에 포함된 비복합 객체의 수를 계산하는 구성 요소 수 메타데이터 필드가 있습니다.

    • 복합 객체를 다른 위치나 스토리지 클래스로 다시 작성하면 결과는 구성요소 수가 1인 복합 객체입니다.

복합 객체 무결성 검사

Cloud Storage는 업로드 시 각 소스 객체의 무결성을 검사하고, 다운로드 시 호출자가 결과로 생성된 복합 객체의 무결성 검사를 수행할 수 있도록 CRC32C를 사용합니다. CRC32C는 해당 구성요소의 CRC32C 값에서 효율적으로 계산할 수 있는 오류 감지 코드입니다. 애플리케이션에서 다음과 같이 CRC32C를 사용해야 합니다.

  • 소스 객체를 업로드할 때 해시 및 ETag 페이지에 나열된 라이브러리 중 하나와 같이 CRC32C 라이브러리를 사용하여 각 객체의 CRC32C를 계산하고 요청에 그 값을 포함해야 합니다. 제공된 값에 따라 Cloud Storage에서 각 업로드의 유효성을 검사합니다.
  • 조합 작업은 소스 객체가 올바르게 어셈블되었는지 자동으로 확인하며 작성 요청의 일부로 제공된 모든 CRC32C 값을 무시합니다. 결과로 생성된 복합 객체의 CRC32C가 응답으로 반환됩니다.
  • 업로드 시점과 조합 시점 사이에 애플리케이션이 소스 객체를 변경할 가능성이 있는 경우 경합 상태가 발생하지 않도록 소스 객체에 세대별 이름을 지정해야 합니다. 또는 원하는 소스 객체의 CRC32C 값에서 CRC32C 값을 빌드한 후 조합 작업에서 반환된 CRC32C 값과 비교할 수 있습니다.
  • 다운로드할 때는 다운로드한 객체의 CRC32C를 계산하여 응답에 포함된 값과 비교해야 합니다.

제한된 추가 및 편집

조합 작업을 사용하면 제한적인 객체 첨부 및 수정을 수행할 수 있습니다.

첨부 작업을 수행하기 위해서는 새로운 임시 객체에 데이터를 업로드하고, 이 임시 객체와 함께 첨부하려는 객체를 조합하고, 선택적으로 조합 작업의 출력 이름을 원래 객체와 동일하게 지정하고, 임시 객체를 삭제합니다.

예를 들어 gcloud CLI에서 문자열 new data를 기존 Cloud Storage 객체에 추가하는 일련의 명령어는 다음과 같습니다.

$ echo 'new data' | gcloud storage cp - gs://bucket/temporary_object
$ gcloud storage objects compose gs://bucket/object_to_append gs://bucket/temporary_object \
    gs://bucket/object_to_append
$ gcloud storage rm gs://bucket/temporary_object

조합을 사용하여 기본적인 객체 편집을 지원할 수도 있습니다. 예를 들어 시퀀스 {Y1, Y2, Y3}에서 객체 X를 조합하고, Y2의 콘텐츠를 바꾸고, 동일한 구성요소에서 X를 재조합할 수 있습니다. 이를 위해서는 Y1, Y2, Y3가 삭제되지 않은 상태로 유지되어야 하므로 해당 구성요소 및 복합물에 대한 비용이 청구됩니다.

다음 단계