GUID
개요
이 가이드에서는 UUID(범용 고유 식별자)라고도 하는 GUID(전역 고유 식별자)를 직렬화하는 방법에 대해 설명합니다.
팁
MongoDB 애플리케이션에서 ObjectId
는 문서의 고유 식별자로 사용할 수 있습니다. 가능한 경우 MongoDB 애플리케이션에서 GUID 대신 ObjectId
를 사용하는 것이 좋습니다.
GUID는 16바이트의 정수로, MongoDB 문서의 고유 ID로 사용할 수 있습니다. 원래 MongoDB의 GUID는 하위 유형 3의 BsonBinaryData
값으로 표현되었습니다. 하위 유형 3은 직렬화 중 바이트 순서를 표준화하지 않기 때문에 MongoDB 드라이버 간에 일관되지 않은 직렬화가 발생했습니다. 바이트 순서를 표준화하고 드라이버 전반에서 일관된 직렬화를 보장하기 위해 BsonBinaryData
하위 유형 4를 만들었습니다.
참고
모든 새 GUID에 BsonBinaryData
하위 유형 4를 사용합니다.
GuidRepresentationMode
많은 MongoDB 컬렉션에서 모든 GUID 필드는 BsonBinaryData
의 동일한 하위 유형을 사용합니다. 그러나 일부 이전 컬렉션에는 하위 유형 3을 사용하는 일부 GUID 필드와 하위 유형 4를 사용하는 일부 GUID 필드가 포함될 수 있습니다.드라이버가 모든 GUID를 올바르게 직렬화 및 역직렬화하도록 하려면 BsonDefaults.GuidRepresentationMode
속성을 다음 GuidRepresentationMode
값 중 하나로 설정해야 합니다.
V2
GuidRepresentationMode.V2
문서의 모든 GUID가 동일한 BsonBinaryData
하위 유형을 사용한다고 가정합니다. 이 모드에서는 GUID 표현이 직렬 변환기가 아닌 해석기나 작성기에 의해 제어됩니다.
V2
기본값은 GuidRepresentationMode
입니다.
참고
.NET/C# 드라이버 버전 3이 릴리스되면 드라이버에서 GuidRepresentationMode.V2
지원이 제거되고 V3
가 기본값이 됩니다.
V3
GuidRepresentationMode.V3
동일한 문서의 필드에서 서로 다른 GUID 형식을 사용할 수 있습니다. 이 모드에서는 각 속성에 대해 직렬 변환기를 구성하여 속성 수준에서 GUID 표현을 제어합니다.
GuidRepresentationMode.V3
를 사용하려면 다음 코드 줄을 실행합니다. MongoClient
객체를 생성하기 전에 애플리케이션의 부트스트랩 단계에서 이 코드를 실행해야 합니다.
BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3;
V3
모드에서 실행하면 다음과 같은 방식으로 드라이버의 동작이 변경됩니다.
BsonBinaryReader.ReadBinaryData()
메서드는readerSettings.GuidRepresentation
을 무시합니다.BsonBinaryWriter.WriteBinaryData()
메서드는writerSettings.GuidRepresentation
을 무시합니다.JsonReader.ReadBinaryData()
메서드는readerSettings.GuidRepresentation
을 무시합니다.JsonWriter
ignoreswriterSettings.GuidRepresentation
GuidRepresentation
매개변수 없이BsonBinaryData.ToGuid()
메서드를 호출하면 하위 유형 4의 GUID에서만 작동합니다.
참고
단일 애플리케이션에서 GuidRepresentationMode.V2
및 GuidRepresentationMode.V3
를 함께 사용할 수 없습니다.
V3에서 GUID 직렬화
GuidRepresentationMode.V3
개별 속성 수준에서 GUID 직렬화를 처리합니다. 이 모드는 V2
모드보다 유연하지만 이는 각 GUID 필드가 올바르게 직렬화 및 역직렬화되었는지 확인해야 한다는 의미이기도 합니다.
.NET/C# 드라이버를 사용하여 C# 클래스를 문서 스키마에 자동 매핑하는 경우 GUID 속성의 BsonGuidRepresentation
특성을 사용하여 표현을 지정할 수 있습니다.
public class Widget { public int Id { get; set; } [ ] public Guid G { get; set; } }
참고
GuidRepresentation.Standard
BsonBinaryData
하위 유형 4와 동일합니다. .NET/C# 드라이버의 다른 GUID 표현(예: CSharpLegacy
, JavaLegacy
및 PythonLegacy
)은 하위 유형 3과 동일하지만 다른 바이트 순서를 사용합니다.
자체 직렬화 코드를 작성하는 경우 GuidSerializer
클래스를 사용하여 개별 GUID 값을 BSON 필드에 직렬화 및 역직렬화할 수 있습니다. 드라이버가 GUID를 올바르게 처리하는지 확인하려면 GuidSerializer
를 구성할 때 GuidRepresentation
매개변수를 사용합니다.
다음 코드 샘플은 하위 유형 4의 GUID 표현을 직렬화하기 위해 GuidSerializer
인스턴스를 만듭니다.
var guidSerializer = new GuidSerializer(GuidRepresentation.Standard);
대부분의 GUID가 동일한 표현을 사용하는 경우 GuidSerializer
를 전역적으로 등록할 수 있습니다. GuidSerializer
를 생성하고 등록하려면 부트스트랩 단계와 같이 애플리케이션 초기에 다음 코드를 실행합니다.
BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
팁
두 가지 하위 유형으로 작업할 때 전역 직렬 변환기를 BsonGuidRepresentation
속성 특성과 결합할 수 있습니다. 예를 들어 가장 일반적으로 사용되는 GUID 하위 유형에 대한 전역 직렬 변환기를 등록한 다음 BsonGuidRepresentation
특성을 사용하여 다른 하위 유형의 GUID 속성을 나타낼 수 있습니다.
V3에서 객체 직렬화
ObjectSerializer
를 사용하여 계층형 객체를 하위 문서로 직렬화할 수 있습니다. V3
사용 시 이러한 객체의 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 설명서를 참조하세요.