GUID
개요
이 가이드 에서는 전역 고유 식별자 (GUID)를 직렬화하는 방법을 학습 수 있습니다. ), UUID( 범용 고유 식별자 )라고도 합니다.
팁
ObjectId
MongoDB 애플리케이션에서는 ObjectId 를 사용할 수 있습니다. 유형을 문서 의 고유 식별자로 사용합니다. 가능하면 ObjectId
MongoDB 애플리케이션에서 GUID 대신 인스턴스를 사용하는 것이 좋습니다.
MongoDB 의 GUID
GUID는 MongoDB 문서 의 고유 ID 로 사용할 수 있는 16바이트 정수입니다. 다음 코드 차단 은 예시 GUID를 보여줍니다.
00112233-4455-6677-8899-aabbccddeeff
원래 MongoDB 는 GUID를 3 하위 유형 의 BsonBinaryData
값으로 표시했습니다. 하위 유형 3 가 인코딩 중에 GUID의 바이트 순서를 표준화하지 않았기 때문에 서로 다른 MongoDB 드라이버가 서로 다른 바이트 순서로 GUID를 인코딩했습니다.
다음 탭은 BsonBinaryData
하위 유형 3 에 대한 이전 GUID의 다양한 운전자 인코딩을 보여줍니다.
33221100-5544-7766-8899-aabbccddeeff
00112233-4455-6677-8899-aabbccddeeff
77665544-3322-1100-ffee-ddccbbaa9988
애플리케이션 간 GUID 바이트 순서를 표준화하기 위해 모든 MongoDB 드라이버가 동일한 방식으로 인코딩하는 BsonBinaryData
하위 유형 4 을 추가했습니다. 애플리케이션 에서 GUID를 사용하는 경우 BsonBinaryData
하위 유형 4 을(를) 사용하여 저장 하는 것이 좋습니다.
모든 BsonBinaryData
하위 유형의 목록은 BsonBinarySubType 에 대한 API 설명서를 참조하세요. 열거형.
GUID 직렬화
모든 새 BsonBinaryData
GUID에 4 하위 유형을 사용하는 것이 좋지만, 일부 이전 MongoDB 컬렉션에는 하위 유형 3 를 사용하는 일부 GUID 필드와 하위 유형 4 을 사용하는 일부 GUID 필드가 포함될 수 있습니다. 이러한 차이점을 고려하기 위해 .NET/ C# 드라이버 는 개별 속성 수준에서 GUID 직렬화를 처리합니다.
.NET/ C# 드라이버 는 GuidRepresentation
열거형 을 사용하여 다양한 BsonBinaryData
하위 유형을 나타냅니다. 다음 표는 GuidRepresentation
열거형 멤버와 해당 BsonBinaryData
하위 유형을 보여줍니다.
GuidRepresentation 멤버 | BsonBinaryData 하위 유형 |
---|---|
Standard | 4 |
CSharpLegacy | 3 |
JavaLegacy | 3 |
PythonLegacy | 3 |
Unspecified | N/A |
참고
CSharpLegacy
, JavaLegacy
및 PythonLegacy
GUID 표현은 모두 BsonBinaryData
하위 유형 3 와 동일하지만 다른 바이트 순서를 사용합니다.
다음 섹션에서는 애플리케이션 에서 GUID 표현을 구성할 수 있는 방법을 설명합니다.
속성으로 구성
.NET/ C# 드라이버 를 사용하여 C# 클래스를 문서 스키마 에 자동 매핑하는 경우 GUID 속성 에 BsonGuidRepresentation
특성을 추가하여 해당 표현을 지정할 수 있습니다. 이 속성은 다음의 값을 허용합니다.
다음 코드 예시 에서는 G
속성 에 대한 Standard
GUID 표현을 지정합니다.
public class Widget { public int Id { get; set; } [ ] public Guid G { get; set; } }
코드에서 구성
자체 직렬화 코드를 작성하는 경우 GuidSerializer
클래스를 사용하여 개별 GUID 값을 BSON 필드에 직렬화 및 역직렬화할 수 있습니다. 드라이버가 GUID를 올바르게 처리하는지 확인하려면 GuidSerializer
를 구성할 때 GuidRepresentation
매개변수를 사용합니다.
다음 코드 샘플 은 BsonBinaryData
하위 유형 4 를 사용하는 속성을 직렬화하기 위해 GuidSerializer
클래스의 인스턴스 를 만듭니다.
var guidSerializer = new GuidSerializer(GuidRepresentation.Standard);
대부분의 GUID가 동일한 표현을 사용하는 경우 GuidSerializer
를 전역적으로 등록할 수 있습니다. GuidSerializer
를 생성하고 등록하려면 부트스트랩 단계와 같이 애플리케이션 초기에 다음 코드를 실행합니다.
BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
팁
두 개의 BsonBinaryData
하위 유형으로 작업하는 경우 글로벌 직렬 변환기를 BsonGuidRepresentation
속성 속성과 결합할 수 있습니다. 예를 예시, 가장 일반적으로 사용되는 GUID 하위 유형에 대한 글로벌 직렬 변환기를 등록한 다음 BsonGuidRepresentation
속성을 사용하여 다른 하위 유형의 GUID 속성을 나타낼 수 있습니다.
중요
직렬 변환기를 전역으로 등록하지 않는 경우 직렬화 가능한 모든 GUID 속성 에 BsonGuidRepresentation
속성을 적용 해야 합니다. 그렇지 않으면 운전자 가 속성 을 직렬화하려고 할 때 예외가 발생합니다.
객체 직렬화
ObjectSerializer
를 사용하여 계층적 객체를 하위 문서로 직렬화할 수 있습니다. 이러한 객체의 GUID가 올바르게 직렬화 및 역직렬화되도록 하려면 ObjectSerializer
구성 시 올바른 GUID 표현을 선택합니다.
다음 코드 샘플은 하위 유형 4의 GUID 표현에 대한 ObjectSerializer
를 만드는 방법을 보여줍니다.
var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object)); var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard);
애플리케이션이 ObjectSerializer
에 의존하여 GUID를 직렬화하는 경우 부트스트랩 단계와 같이 애플리케이션 초기에 직렬 변환기를 등록해야 합니다. 등록한 직렬 변환기는 객체 직렬 변환기가 필요하고 달리 지정되지 않은 경우 전역적으로 사용됩니다.
ObjectSerializer
를 등록하려면 BsonSerializer.RegisterSerializer()
메서드에 전달합니다.
var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object)); var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard); BsonSerializer.RegisterSerializer(objectSerializer);
추가 정보
이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.