Docs Menu
Docs Home
/ / /
C#/.NET
/ /

GUID

이 페이지의 내용

  • 개요
  • GuidRepresentationMode
  • V2
  • V3
  • V3에서 GUID 직렬화
  • V3에서 객체 직렬화
  • 추가 정보

이 가이드에서는 UUID(범용 고유 식별자)라고도 하는 GUID(전역 고유 식별자)를 직렬화하는 방법에 대해 설명합니다.

MongoDB 애플리케이션에서 ObjectId는 문서의 고유 식별자로 사용할 수 있습니다. 가능한 경우 MongoDB 애플리케이션에서 GUID 대신 ObjectId를 사용하는 것이 좋습니다.

GUID는 16바이트의 정수로, MongoDB 문서의 고유 ID로 사용할 수 있습니다. 원래 MongoDB의 GUID는 하위 유형 3의 BsonBinaryData 값으로 표현되었습니다. 하위 유형 3은 직렬화 중 바이트 순서를 표준화하지 않기 때문에 MongoDB 드라이버 간에 일관되지 않은 직렬화가 발생했습니다. 바이트 순서를 표준화하고 드라이버 전반에서 일관된 직렬화를 보장하기 위해 BsonBinaryData 하위 유형 4를 만들었습니다.

참고

모든 새 GUID에 BsonBinaryData 하위 유형 4를 사용합니다.

많은 MongoDB 컬렉션에서 모든 GUID 필드는 BsonBinaryData의 동일한 하위 유형을 사용합니다. 그러나 일부 이전 컬렉션에는 하위 유형 3을 사용하는 일부 GUID 필드와 하위 유형 4를 사용하는 일부 GUID 필드가 포함될 수 있습니다.드라이버가 모든 GUID를 올바르게 직렬화 및 역직렬화하도록 하려면 BsonDefaults.GuidRepresentationMode 속성을 다음 GuidRepresentationMode 값 중 하나로 설정해야 합니다.

GuidRepresentationMode.V2 문서의 모든 GUID가 동일한 BsonBinaryData 하위 유형을 사용한다고 가정합니다. 이 모드에서는 GUID 표현이 직렬 변환기가 아닌 해석기나 작성기에 의해 제어됩니다.

V2 기본값은 GuidRepresentationMode입니다.

참고

.NET/C# 드라이버 버전 3이 릴리스되면 드라이버에서 GuidRepresentationMode.V2 지원이 제거되고 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 ignores writerSettings.GuidRepresentation

  • GuidRepresentation 매개변수 없이 BsonBinaryData.ToGuid() 메서드를 호출하면 하위 유형 4의 GUID에서만 작동합니다.

참고

단일 애플리케이션에서 GuidRepresentationMode.V2GuidRepresentationMode.V3를 함께 사용할 수 없습니다.

GuidRepresentationMode.V3 개별 속성 수준에서 GUID 직렬화를 처리합니다. 이 모드는 V2 모드보다 유연하지만 이는 각 GUID 필드가 올바르게 직렬화 및 역직렬화되었는지 확인해야 한다는 의미이기도 합니다.

.NET/C# 드라이버를 사용하여 C# 클래스를 문서 스키마에 자동 매핑하는 경우 GUID 속성의 BsonGuidRepresentation 특성을 사용하여 표현을 지정할 수 있습니다.

public class Widget
{
public int Id { get; set; }
[BsonGuidRepresentation(GuidRepresentation.Standard)]
public Guid G { get; set; }
}

참고

GuidRepresentation.Standard BsonBinaryData 하위 유형 4와 동일합니다. .NET/C# 드라이버의 다른 GUID 표현(예: CSharpLegacy, JavaLegacyPythonLegacy)은 하위 유형 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 속성을 나타낼 수 있습니다.

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 설명서를 참조하세요.

돌아가기

다형성 객체