복합 객체

예시로 이동

이 페이지에서는 추가 객체 데이터를 전송하지 않고 기존 객체로부터 만드는 복합 객체에 대해 설명합니다. 복합 객체는 객체에 항목을 첨부하는 것뿐만 아니라 업로드한 구성요소를 병렬로 사용하여 객체를 빌드하는 데도 유용합니다.

조합 작업

조합 작업은 해당 콘텐츠가 지정된 순서의 소스 객체로 연결된 새로운 복합 객체를 만듭니다. 소스 객체는 모두 다음을 충족해야 합니다.

조합을 수행할 때:

  • 소스 객체는 영향을 받지 않습니다.
  • 1~32개 사이의 소스 객체를 사용할 수 있습니다.
  • 소스 객체는 자체적으로 복합 객체일 수 있습니다.
  • 결과로 생성된 복합 객체에는 소스 객체와 동일한 스토리지 클래스가 있습니다.
  • 소스 객체를 이후에 교체하거나 삭제해도 결과로 생성된 복합 객체는 변경되지 않습니다.
  • gsutil을 사용하여 객체 조합을 수행할 때 결과 복합 객체의 Content-Type은 첫 번째 소스 객체의 Content-Type과 일치하도록 설정되어야 합니다.

복합 객체 메타데이터

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

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

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

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

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

복합 객체 무결성 검사

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

  • 소스 객체를 업로드할 때 아래에 나열된 것과 같은 CRC32C 라이브러리를 사용하여 각 객체의 CRC32C를 계산하고 요청에 그 값을 포함해야 합니다.
  • 조합 작업의 경우 요청에 CRC32C를 포함해야 합니다. Cloud Storage는 소스 객체의 CRC32C 값으로부터 CRC32C 값을 빌드하여 검사할 수 있는 복합 객체의 CRC32C로 응답합니다.
  • 다운로드할 때는 다운로드한 객체의 CRC32C를 계산하여 응답에 포함된 값과 비교해야 합니다.
  • 업로드 시점과 조합 시점 사이에 애플리케이션이 소스 객체를 변경할 가능성이 있는 경우 경합 상태가 발생하지 않도록 소스 객체에 세대별 이름을 지정해야 합니다.

CRC32C 값을 계산하는 라이브러리에는 C++용 Boost, 자바용 GoogleCloudPlatform crc32c, Python용 crcmod, Ruby용 digest-crc가 포함되어 있습니다. 또한 CRC32C는 최신 Intel CPU의 하드웨어에서 지원됩니다.

사용 사례

객체 조합은 병렬 업로드를 수행할 때 또는 객체에 데이터를 첨부하기 위한 방법으로 사용할 수 있는 유용한 도구입니다.

동시 업로드

객체 조합은 객체를 병렬로 업로드하기 위한 목적으로 사용될 수 있습니다. 즉, 데이터를 여러 청크로 나누고, 각 청크를 각 고유 객체에 병렬로 업로드하고, 최종 객체를 조합하고, 모든 임시 소스 객체를 삭제하는 일련의 작업을 수행할 수 있습니다.

업로드 및 조합 요청 간에 소스 객체가 변경되지 않도록 보호하려면 각 소스에 대해 예상되는 생성 수를 제공해야 합니다. 객체 세대에 대한 자세한 내용은 세대 및 사전 조건을 참조하세요.

제한된 추가 및 편집

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

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

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

다음 단계