이 페이지에서는 추가 객체 데이터를 전송하지 않고 기존 객체로부터 만드는 복합 객체에 대해 설명합니다. 복합 객체는 기존 객체에 추가하는 데 유용하며 동시에 여러 구성요소로 업로드한 객체를 다시 생성하는 데에도 유용합니다.
조합 작업
조합 작업은 주어진 소스 객체 시퀀스에 있는 데이터를 연결하여 복합 객체라는 새 객체를 만듭니다. 소스 객체는 모두 다음을 충족해야 합니다.
- 동일한 스토리지 클래스를 포함해야 합니다.
- 동일한 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를 사용해야 합니다.
- 소스 객체를 업로드할 때 객체 메타데이터 페이지에 나열된 라이브러리 중 하나와 같이 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가 삭제되지 않은 상태로 유지되어야 하므로 해당 구성요소 및 복합물에 대한 비용이 청구됩니다.
복합 객체 컨텍스트
객체 구성 작업 중에 Cloud Storage는 소스 객체의 모든 컨텍스트 (미리보기)를 병합하고 이러한 컨텍스트를 대상 객체에 연결합니다. 컨텍스트는 다음 섹션에 설명된 대로 고유한 컨텍스트 키와 중복된 컨텍스트 키를 모두 처리하기 위해 병합됩니다.
고유 컨텍스트 키
소스 객체에 고유한 컨텍스트 키가 있는 경우 Cloud Storage는 이러한 키와 해당 값을 대상 객체에 직접 연결합니다.
다음 예시를 참조하세요.
소스 객체 A 컨텍스트: Department: Engineering, Status: Active
소스 객체 B 컨텍스트: Owner: m_jones, Version: 1.1
작성 작업 후 대상 객체에는 다음과 같은 결합된 컨텍스트가 있습니다.
{ "contexts": { "custom": { "Department": { "value": "Engineering", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Status": { "value": "Active", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Owner": { "value": "m_jones", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" }, "Version": { "value": "1.1", "createTime": "2023-10-26T10:00:00.000Z", "updateTime": "2023-10-26T10:00:00.000Z" } } } }
중복 컨텍스트 키
여러 소스 객체의 컨텍스트 키가 동일한 경우 Cloud Storage에서 처리한 마지막 객체의 값이 이전에 처리된 객체의 값을 재정의합니다.
예를 들어 다음과 같은 순서로 처리된 소스 객체를 고려해 보겠습니다.
소스 객체 A
소스 객체 B
소스 객체 A 컨텍스트: Version: 1.0, ReleaseDate: 2024-01-15
소스 객체 B 컨텍스트: Version: 1.1, Owner: m_jones
두 소스 객체 모두 Version
키가 있지만 객체 A에는 Version: 1.0
이 있고 객체 B에는 Version: 1.1
이 있습니다. Cloud Storage는 소스 객체 A 다음에 소스 객체 B를 처리하므로 소스 객체 B의 Version
값이 우선하고 최종 값은 1.1
입니다.
대상 객체는 다음과 같이 이러한 컨텍스트를 결합합니다.
{ "contexts": { "custom": { "Version": { "value": "1.1", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" }, "ReleaseDate": { "value": "2024-01-15", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" }, "Owner": { "value": "m_jones", "createTime": "2025-01-01T00:00:00.000Z", "updateTime": "2025-01-01T00:00:00.000Z" } } } }