비컨 구성 - AWS 데이터베이스 암호화 SDK

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

비컨 구성

클라이언트 측 암호화 라이브러리는 AWS 데이터베이스 암호화 SDK로 이름이 변경되었습니다. 이 개발자 안내서는 여전히 DynamoDB Encryption Client에 대한 정보를 제공합니다.

검색 가능한 암호화를 지원하는 두 가지 유형의 비컨이 있습니다. 표준 비컨은 동등 검색을 수행합니다. 데이터베이스에서 검색 가능한 암호화를 구현하는 가장 간단한 방법입니다. 복합 비컨은 기본적 일반 텍스트 문자열과 표준 비컨을 결합하여 보다 복잡한 쿼리를 수행합니다.

비컨은 채워지지 않은 새 데이터베이스에 구현되도록 설계되었습니다. 기존 데이터베이스에 구성된 모든 비컨은 데이터베이스에 기록된 새 레코드만 매핑합니다. 비컨은 필드의 일반 텍스트 값에서 계산됩니다. 필드가 암호화되면 비컨이 기존 데이터를 매핑할 방법이 없습니다. 비컨으로 새 레코드를 작성한 후에는 비컨의 구성을 업데이트할 수 없습니다. 하지만 레코드에 추가하는 새 필드에 대해 새 비컨을 추가할 수 있습니다.

액세스 패턴을 파악한 후에는 데이터베이스 구현의 두 번째 단계로 비컨을 구성해야 합니다. 그런 다음 모든 비콘을 구성한 후에는 AWS KMS 계층적 키링을 만들고, 비콘 버전을 정의하고, 각 비콘에 대한 보조 인덱스를 구성하고, 암호화 작업을 정의하고, 데이터베이스 및 데이터베이스 암호화 SDK 클라이언트를 구성해야 합니다. AWS 자세한 내용은 비컨 사용을 참조하세요.

비컨 버전을 더 쉽게 정의하려면 표준 및 복합 비컨에 대한 목록을 만드는 것이 좋습니다. 생성한 각 비컨을 구성할 때 해당 표준 또는 복합 비컨 목록에 추가합니다.

표준 비컨 구성

표준 비컨은 데이터베이스에서 검색 가능한 암호화를 구현하는 가장 간단한 방법입니다. 암호화된 필드 또는 가상 필드 하나에 대해서만 동등 검색을 수행할 수 있습니다.

구성 구문의 예제

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .build(); standardBeaconList.add(exampleStandardBeacon);
C# / .NET
var standardBeaconList = new List<StandardBeacon>(); StandardBeacon exampleStandardBeacon = new StandardBeacon { Name = "beaconName", Length = 10 }; standardBeaconList.Add(exampleStandardBeacon);

표준 비컨을 구성하기 위해서는 다음 값을 제공해야 합니다.

비컨 이름

암호화된 필드를 쿼리할 때 사용하는 이름.

비컨 이름은 암호화된 필드 또는 가상 필드와 같은 이름일 수 있지만 암호화되지 않은 필드와 같은 이름일 수는 없습니다. 가능하면 표준 비컨을 구성하는 데 사용할 암호화된 필드 또는 가상 필드의 이름을 사용하는 것이 좋습니다. 서로 다른 두 비컨은 동일한 비컨 이름을 가질 수 없습니다. 구현에 가장 적합한 비컨 이름을 결정하는 데 도움이 필요하면 비컨 이름 선택을 참조하세요.

비컨 길이

잘라낸 후에도 유지되는 비컨 해시 값의 비트 수입니다.

비컨 길이에 따라 해당 비컨에서 생성되는 평균 오탐 수가 결정됩니다. 구현에 적합한 비컨 길이를 결정하는 데 도움이 되는 자세한 내용 및 도움말은 비컨 길이 결정을 참조하세요.

비컨 소스(선택 사항)

표준 비컨을 구성하는 데 사용되는 필드입니다.

비컨 소스는 필드 이름이거나 중첩된 필드의 값을 참조하는 인덱스이어야 합니다. 비콘 이름이 비콘 소스와 동일한 경우 구성에서 비콘 소스를 생략할 수 있으며 AWS Database Encryption SDK는 자동으로 비콘 이름을 비콘 소스로 사용합니다.

가상 필드 생성

가상 필드를 만들려면 가상 필드의 이름과 원본 필드 목록을 제공해야 합니다. 가상 부분 목록에 원본 필드를 추가하는 순서에 따라 가상 필드를 작성할 때 원본 필드를 연결하는 순서가 결정됩니다. 다음 예제에서는 원본 필드 두 개를 완전히 연결하여 가상 필드를 만듭니다.

참고

데이터베이스를 채우기 전에 가상 필드가 예상한 결과를 생성하는지 확인하는 것이 좋습니다. 자세한 내용은 비콘 출력 테스트를 참조하십시오.

Java

전체 코드 예제.java를 참조하십시오. VirtualBeaconSearchableEncryptionExample

List<VirtualPart> virtualPartList = new ArrayList<>(); virtualPartList.add(sourceField1); virtualPartList.add(sourceField2); VirtualField virtualFieldName = VirtualField.builder() .name("virtualFieldName") .parts(virtualPartList) .build(); List<VirtualField> virtualFieldList = new ArrayList<>(); virtualFieldList.add(virtualFieldName);
C# / .NET

전체 코드 예제 참조: .cs VirtualBeaconSearchableEncryptionExample

var virtualPartList = new List<VirtualPart> { sourceField1, sourceField2 }; var virtualFieldName = new VirtualField { Name = "virtualFieldName", Parts = virtualPartList }; var virtualFieldList = new List<VirtualField> { virtualFieldName };

원본 필드의 특정 세그먼트를 사용하여 가상 필드를 만들려면 원본 필드를 가상 부분 목록에 추가하기 전에 해당 변환을 정의해야 합니다.

가상 필드에 대한 보안 고려 사항

비컨은 필드의 암호화된 상태를 변경하지 않습니다. 그러나 비컨을 사용할 때 쿼리의 효율성과 데이터 분포에 대해 공개되는 정보의 양 사이에는 본질적인 균형이 있습니다. 비컨을 구성하는 방식에 따라 해당 비컨이 보존하는 보안 수준이 결정됩니다.

소스 필드가 기존 표준 비컨과 겹치는 가상 필드를 만들지 마세요. 표준 비컨을 만드는 데 이미 사용된 소스 필드를 포함하는 가상 필드를 만들면 두 비컨의 보안 수준이 낮아질 수 있습니다. 보안이 약화되는 정도는 추가 소스 필드에서 추가한 엔트로피 수준에 따라 달라집니다. 엔트로피 수준은 추가 소스 필드의 고유 값 분포와 추가 소스 필드가 가상 필드의 전체 크기에 기여하는 비트 수에 따라 결정됩니다.

모집단 및 비컨 길이를 사용하여 가상 필드의 원본 필드가 데이터 세트의 보안을 유지하는지 확인할 수 있습니다. 모집단은 필드의 예상 고유 값 수입니다. 모집단은 정확할 필요는 없습니다. 필드의 모집단을 추정하는 데 도움이 필요하면 모집단 추정을 참조하세요.

가상 필드의 보안을 검토할 때 다음 예제를 고려하세요.

  • Beacon1은 FieldA로 구성됩니다. FieldA의 모집단은 2(Beacon1 길이)보다 큽니다.

  • Beacon2는 VirtualField으로 구성되어 있는데 이는 FieldA, FieldB, FieldC, 및 FieldD로 구성되어 있습니다. FieldB, FieldC, 및 FieldD을 합친 모집단은 2N 이상입니다.

다음 설명이 참인 경우 Beacon2는 Beacon1과 Beacon2의 보안을 모두 유지합니다.

N ≥ (Beacon1 length)/2

그리고

N ≥ (Beacon2 length)/2

비콘 스타일 정의

표준 비콘을 사용하여 암호화된 필드 또는 가상 필드에 대해 동등성 검색을 수행할 수 있습니다. 또는 복합 비콘을 구성하여 더 복잡한 데이터베이스 작업을 수행하는 데 사용할 수도 있습니다. AWS Database Encryption SDK는 표준 비콘을 구성하고 관리할 수 있도록 표준 비콘의 용도를 정의하는 다음과 같은 선택적 비콘 스타일을 제공합니다.

참고

비콘 스타일을 정의하려면 데이터베이스 암호화 SDK 버전 3.2 이상을 사용해야 합니다. AWS 비콘 구성에 비콘 스타일을 추가하기 전에 모든 리더에 새 버전을 배포하세요.

PartOnly

로 정의된 표준 비콘은 복합 비콘의 암호화된 부분을 정의하는 데만 사용할 PartOnly 수 있습니다. PartOnly표준 비콘은 직접 쿼리할 수 없습니다.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .style( BeaconStyle.builder() .partOnly(PartOnly.builder().build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C#/.NET
new StandardBeacon { Name = "beaconName", Length = beaconLengthInBits, Style = new BeaconStyle { PartOnly = new PartOnly() } }
Shared

기본적으로 모든 표준 비콘은 비콘 계산을 위한 고유한 HMAC 키를 생성합니다. 따라서 두 개의 개별 표준 비콘에서 암호화된 필드에 대해 동등 검색을 수행할 수 없습니다. 로 정의된 표준 비콘은 다른 표준 비콘의 HMAC 키를 계산에 Shared 사용합니다.

예를 들어 beacon1 필드를 필드와 비교해야 하는 경우 beacon2 Shared 계산에 HMAC 키를 사용하는 beacon2 비콘으로 정의하십시오. beacon1

참고

비콘을 구성하기 전에 보안 및 성능 요구 사항을 고려하세요. Shared Shared비콘은 데이터세트 배포에 대해 식별할 수 있는 통계 정보의 양을 증가시킬 수 있습니다. 예를 들어 어떤 공유 필드에 동일한 일반 텍스트 값이 포함되어 있는지 확인할 수 있습니다.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beacon2") .length(beaconLengthInBits) .style( BeaconStyle.builder() .shared(Shared.builder().other("beacon1").build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C#/.NET
new StandardBeacon { Name = "beacon2", Length = beaconLengthInBits, Style = new BeaconStyle { Shared = new Shared { Other = "beacon1" } } }
AsSet

기본적으로 필드 값이 집합인 경우 AWS 데이터베이스 암호화 SDK는 집합에 대한 단일 표준 비콘을 계산합니다. 따라서 암호화된 a 필드가 CONTAINS(a, :value) 있는 경우 쿼리를 수행할 수 없습니다. 로 정의된 표준 비콘은 세트의 각 개별 요소에 대한 개별 표준 비콘 값을 AsSet 계산하여 항목의 비콘 값을 세트로 저장합니다. 이렇게 하면 AWS 데이터베이스 암호화 SDK에서 쿼리를 수행할 수 있습니다. CONTAINS(a, :value)

AsSet표준 비콘을 정의하려면 세트의 요소가 모두 같은 비콘 길이를 사용할 수 있도록 동일한 모집단에서 가져온 것이어야 합니다. 신호 값을 계산할 때 충돌이 발생한 경우 비콘 집합의 요소 수가 일반 텍스트 집합보다 적을 수 있습니다.

참고

비콘을 구성하기 전에 보안 및 성능 요구 사항을 고려하십시오. AsSet AsSet비콘은 데이터세트 배포에 대해 식별할 수 있는 통계 정보의 양을 증가시킬 수 있습니다. 예를 들어 일반 텍스트 집합의 크기를 표시할 수 있습니다.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beaconName") .length(beaconLengthInBits) .style( BeaconStyle.builder() .asSet(AsSet.builder().build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C#/.NET
new StandardBeacon { Name = "beaconName", Length = beaconLengthInBits, Style = new BeaconStyle { AsSet = new AsSet() } }
SharedSet

로 정의된 표준 비콘은 SharedAsSet 함수를 SharedSet 결합하여 집합과 필드의 암호화된 값에 대해 동등 검색을 수행할 수 있도록 합니다. 이렇게 하면 AWS Database Encryption SDK가 쿼리를 수행할 수 있습니다. CONTAINS(a, b) 여기서 a 는 암호화된 집합이고 필드는 암호화된 b 필드입니다.

참고

Shared비콘을 구성하기 전에 보안 및 성능 요구 사항을 고려하세요. SharedSet비콘은 데이터세트 배포에 대해 식별할 수 있는 통계 정보의 양을 증가시킬 수 있습니다. 예를 들어 일반 텍스트 집합의 크기나 동일한 일반 텍스트 값이 포함된 공유 필드를 표시할 수 있습니다.

Java
List<StandardBeacon> standardBeaconList = new ArrayList<>(); StandardBeacon exampleStandardBeacon = StandardBeacon.builder() .name("beacon2") .length(beaconLengthInBits) .style( BeaconStyle.builder() .sharedSet(SharedSet.builder().other("beacon1").build()) .build() ) .build(); standardBeaconList.add(exampleStandardBeacon);
C#/.NET
new StandardBeacon { Name = "beacon2", Length = beaconLengthInBits, Style = new BeaconStyle { SharedSet = new SharedSet { Other = "beacon1" } } }

복합 비컨 설정

복합 비컨은 기본 일반 텍스트 문자열과 표준 비컨을 결합하여 단일 인덱스에서 서로 다른 두 가지 레코드 유형을 쿼리하거나 정렬 키로 필드 조합을 쿼리하는 등 복잡한 데이터베이스 작업을 수행합니다. 복합 비콘은ENCRYPT_AND_SIGN,SIGN_ONLY, 필드로 구성할 수 있습니다. SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 복합 비컨에 포함된 모든 암호화된 필드에 대해 표준 비컨을 만들어야 합니다.

참고

데이터베이스를 채우기 전에 복합 비콘이 예상 결과를 생성하는지 확인하는 것이 좋습니다. 자세한 내용은 비콘 출력 테스트를 참조하십시오.

구성 구문의 예제

Java

복합 비콘 구성

다음 예에서는 복합 비콘 구성 내에서 암호화되고 서명된 부품 목록을 로컬로 정의합니다.

List<CompoundBeacon> compoundBeaconList = new ArrayList<>(); CompoundBeacon exampleCompoundBeacon = CompoundBeacon.builder() .name("compoundBeaconName") .split(".") .encrypted(encryptedPartList) .signed(signedPartList) .constructors(constructorList) .build(); compoundBeaconList.add(exampleCompoundBeacon);

비콘 버전 정의

다음 예제는 비콘 버전에서 암호화되고 서명된 부품 목록을 전역적으로 정의합니다. 비콘 버전 정의에 대한 자세한 내용은 비콘 사용을 참조하십시오.

List<BeaconVersion> beaconVersions = new ArrayList<>(); beaconVersions.add( BeaconVersion.builder() .standardBeacons(standardBeaconList) .compoundBeacons(compoundBeaconList) .encryptedParts(encryptedPartList) .signedParts(signedPartList) .version(1) // MUST be 1 .keyStore(keyStore) .keySource(BeaconKeySource.builder() .single(SingleKeyStore.builder() .keyId(branchKeyId) .cacheTTL(6000) .build()) .build()) .build() );
C# / .NET

전체 코드 샘플: .cs를 참조하십시오. BeaconConfig

복합 비콘 구성

다음 예에서는 복합 비콘 구성 내에서 암호화되고 서명된 부품 목록을 로컬로 정의합니다.

var compoundBeaconList = new List<CompoundBeacon>(); var exampleCompoundBeacon = new CompoundBeacon { Name = "compoundBeaconName", Split = ".", Encrypted = encryptedPartList, Signed = signedPartList, Constructors = constructorList }; compoundBeaconList.Add(exampleCompoundBeacon);

비콘 버전 정의

다음 예제는 비콘 버전에서 암호화되고 서명된 부품 목록을 전역적으로 정의합니다. 비콘 버전 정의에 대한 자세한 내용은 비콘 사용을 참조하십시오.

var beaconVersions = new List<BeaconVersion> { new BeaconVersion { StandardBeacons = standardBeaconList, CompoundBeacons = compoundBeaconList, EncryptedParts = encryptedPartsList, SignedParts = signedPartsList, Version = 1, // MUST be 1 KeyStore = keyStore, KeySource = new BeaconKeySource { Single = new SingleKeyStore { KeyId = branchKeyId, CacheTTL = 6000 } } } };

암호화된 부품과 서명된 부품을 로컬 또는 전체적으로 정의된 목록에서 정의할 수 있습니다. 가능하면 비콘 버전의 글로벌 목록에 암호화되고 서명된 부품을 정의하는 것이 좋습니다. 암호화되고 서명된 부품을 전역적으로 정의하면 각 부품을 한 번 정의한 다음 여러 복합 비콘 구성에서 해당 부품을 재사용할 수 있습니다. 암호화되거나 서명된 부품을 한 번만 사용하려는 경우 복합 비콘 구성의 로컬 목록에서 해당 부품을 정의할 수 있습니다. 생성자 목록에서 로컬 부분과 글로벌 부분을 모두 참조할 수 있습니다.

암호화되고 서명된 부품 목록을 전역적으로 정의하는 경우 복합 비콘이 복합 비콘 구성의 필드를 조합할 수 있는 가능한 모든 방법을 식별하는 생성자 부분 목록을 제공해야 합니다.

참고

암호화되고 서명된 부품 목록을 전체적으로 정의하려면 AWS 데이터베이스 암호화 SDK 버전 3.2 이상을 사용해야 합니다. 새 부분을 전체적으로 정의하기 전에 모든 리더에 새 버전을 배포하십시오.

기존 비콘 구성을 업데이트하여 암호화되고 서명된 부품 목록을 전역적으로 정의할 수는 없습니다.

복합 비컨을 구성하기 위해서는 다음 값을 제공해야 합니다.

비컨 이름

암호화된 필드를 쿼리할 때 사용하는 이름.

비컨 이름은 암호화된 필드 또는 가상 필드와 같은 이름일 수 있지만 암호화되지 않은 필드와 같은 이름일 수는 없습니다. 두 비컨이 동일한 비컨 이름을 가질 수는 없습니다. 구현에 가장 적합한 비컨 이름을 결정하는 데 도움이 필요하면 비컨 이름 선택을 참조하세요.

분할 캐릭터

복합 비컨을 구성하는 부분을 구분하는 데 사용되는 문자입니다.

복합 비컨을 구성하는 모든 필드의 일반 텍스트 값에는 분할 문자가 나타날 수 없습니다.

암호화된 부품 목록

복합 비컨에 포함된 ENCRYPT_AND_SIGN 필드를 식별합니다.

각 부분에는 이름과 접두사가 포함되어야 합니다. 부분 이름은 암호화된 필드로 구성된 표준 비컨의 이름이어야 합니다. 접두사는 임의의 문자열일 수 있지만 고유해야 합니다. 암호화된 부분은 서명된 부분과 동일한 접두사를 가질 수 없습니다. 부분을 복합 비컨이 제공하는 다른 부분과 구분하는 짧은 값을 사용하는 것이 좋습니다.

가능하면 암호화된 부품을 전역적으로 정의하는 것이 좋습니다. 암호화된 부품을 하나의 복합 신호에서만 사용하려는 경우 암호화된 부품을 로컬로 정의하는 것을 고려할 수 있습니다. 로컬에서 정의된 암호화된 부품은 전체적으로 정의된 암호화된 부품과 동일한 접두사 또는 이름을 가질 수 없습니다.

Java
List<EncryptedPart> encryptedPartList = new ArrayList<>); EncryptedPart encryptedPartExample = EncryptedPart.builder() .name("standardBeaconName") .prefix("E-") .build(); encryptedPartList.add(encryptedPartExample);
C# / .NET
var encryptedPartList = new List<EncryptedPart>(); var encryptedPartExample = new EncryptedPart { Name = "compoundBeaconName", Prefix = "E-" }; encryptedPartList.Add(encryptedPartExample);
서명된 부품 목록

복합 비콘에 포함된 서명된 필드를 식별합니다.

참고

서명된 부품은 선택 사항입니다. 서명된 부품을 참조하지 않는 복합 비콘을 구성할 수 있습니다.

각 부분에는 이름, 출처 및 접두사가 포함되어야 합니다. 소스는 부품이 식별하는 SIGN_ONLY 또는 SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 필드입니다. 소스는 필드 이름이거나 중첩된 필드의 값을 참조하는 인덱스이어야 합니다. 부품 이름이 소스를 식별하는 경우 소스를 생략할 수 있습니다. 그러면 AWS Database Encryption SDK가 자동으로 이름을 소스로 사용합니다. 가능하면 소스를 부분 이름으로 지정하는 것이 좋습니다. 접두사는 임의의 문자열일 수 있지만 고유해야 합니다. 서명된 부분은 암호화된 부분과 동일한 접두사를 가질 수 없습니다. 부분을 복합 비컨이 제공하는 다른 부분과 구분하는 짧은 값을 사용하는 것이 좋습니다.

가능하면 서명된 부분을 전역적으로 정의하는 것이 좋습니다. 서명된 부품을 하나의 복합 신호에서만 사용하려는 경우 서명된 부품을 로컬로 정의하는 것을 고려할 수 있습니다. 로컬에서 정의된 서명된 부품은 전체적으로 정의된 서명 부품과 동일한 접두사 또는 이름을 가질 수 없습니다.

Java
List<SignedPart> signedPartList = new ArrayList<>); SignedPart signedPartExample = SignedPart.builder() .name("signedFieldName") .prefix("S-") .build(); signedPartList.add(signedPartExample);
C# / .NET
var signedPartsList = new List<SignedPart> { new SignedPart { Name = "signedFieldName1", Prefix = "S-" }, new SignedPart { Name = "signedFieldName2", Prefix = "SF-" } };
생성자 목록

암호화되고 서명된 부분을 복합 비컨으로 조합할 수 있는 다양한 방법을 정의하는 생성자를 식별합니다. 생성자 목록에서 로컬 파트와 글로벌 파트를 모두 참조할 수 있습니다.

전역적으로 정의되고 암호화되고 서명된 부분으로 복합 비콘을 구성하는 경우 생성자 목록을 제공해야 합니다.

전체적으로 정의된 암호화되거나 서명된 부분을 사용하여 복합 비콘을 구성하지 않는 경우 생성자 목록은 선택 사항입니다. 생성자 목록을 지정하지 않는 경우 AWS Database Encryption SDK는 다음 기본 생성자를 사용하여 복합 비콘을 어셈블합니다.

  • 서명된 모든 부분은 서명된 부분 목록에 추가된 순서대로

  • 암호화된 모든 부분(암호화된 부분 목록에 추가된 순서대로)

  • 모든 부분이 필요합니다.

Constructors

각 생성자는 복합 비컨을 조합할 수 있는 한 가지 방법을 정의하는 생성자 부분의 정렬된 목록입니다. 생성자 부분은 목록에 추가된 순서대로 함께 결합되며 각 부분은 지정된 분할 문자로 구분됩니다.

각 생성자 부분은 암호화된 부분이나 서명된 부분의 이름을 지정하고 생성자 내에서 해당 부분이 필수인지 아니면 선택적인지 정의합니다. 예를 들어 Field1, Field1.Field2, 및 Field1.Field2.Field3에 대한 복합 비컨을 조회하고자 한다면, Field2Field3을 선택 사항으로 표시하고 생성자를 하나 생성합니다.

생성자마다 필수 부분이 하나 이상 있어야 합니다. 쿼리에 BEGINS_WITH 연산자를 사용할 수 있도록 각 생성자의 첫 번째 부분을 필수로 설정하는 것이 좋습니다.

생성자의 필수 부분이 모두 레코드에 있으면 생성자는 성공합니다. 새 레코드를 작성할 때 복합 비컨은 생성자 목록을 사용하여 제공된 값에서 비컨을 조합할 수 있는지 여부를 결정합니다. 생성자 목록에 생성자가 추가된 순서대로 비컨을 조합하려고 시도하고 성공한 첫 번째 생성자를 사용합니다. 생성자가 성공하지 못하면 비컨이 레코드에 기록되지 않습니다.

쿼리 결과가 정확한지 확인하려면 모든 리더와 작성자가 동일한 순서의 생성자를 지정해야 합니다.

다음 절차에 따라 생성자 목록을 지정하세요.

  1. 암호화된 각 부분과 서명된 부분에 대한 생성자 부분을 만들어 해당 부분이 필요한지 여부를 정의합니다.

    생성자 부분 이름은 생성자가 나타내는 표준 비컨 또는 서명된 필드의 이름이어야 합니다.

    Java
    ConstructorPart field1ConstructorPart = ConstructorPart.builder() .name("Field1") .required(true) .build();
    C# / .NET
    var field1ConstructorPart = new ConstructorPart { Name = "Field1", Required = true };
  2. 1단계에서 만든 생성자 부분을 사용하여 복합 비컨을 조합할 수 있도록 가능한 모든 방법에 맞는 생성자를 만듭니다.

    예를 들어 Field1.Field2.Field3Field4.Field2.Field3에 대해 쿼리하려면 두 개의 생성자를 만들어야 합니다. Field1Field4은 두 개의 별도 생성자에 정의되어 있으므로 둘 다 필요할 수 있습니다.

    Java
    // Create a list for Field1.Field2.Field3 queries List<ConstructorPart> field123ConstructorPartList = new ArrayList<>(); field123ConstructorPartList.add(field1ConstructorPart); field123ConstructorPartList.add(field2ConstructorPart); field123ConstructorPartList.add(field3ConstructorPart); Constructor field123Constructor = Constructor.builder() .parts(field123ConstructorPartList) .build(); // Create a list for Field4.Field2.Field1 queries List<ConstructorPart> field421ConstructorPartList = new ArrayList<>(); field421ConstructorPartList.add(field4ConstructorPart); field421ConstructorPartList.add(field2ConstructorPart); field421ConstructorPartList.add(field1ConstructorPart); Constructor field421Constructor = Constructor.builder() .parts(field421ConstructorPartList) .build();
    C# / .NET
    // Create a list for Field1.Field2.Field3 queries var field123ConstructorPartList = new Constructor { Parts = new List<ConstructorPart> { field1ConstructorPart, field2ConstructorPart, field3ConstructorPart } }; // Create a list for Field4.Field2.Field1 queries var field421ConstructorPartList = new Constructor { Parts = new List<ConstructorPart> { field4ConstructorPart, field2ConstructorPart, field1ConstructorPart } };
  3. 2단계에서 만든 모든 생성자를 포함하는 생성자 목록을 만듭니다.

    Java
    List<Constructor> constructorList = new ArrayList<>(); constructorList.add(field123Constructor) constructorList.add(field421Constructor)
    C# / .NET
    var constructorList = new List<Constructor> { field123Constructor, field421Constructor };
  4. 복합 비콘을 만들 constructorList 때 를 지정하십시오.