GUID
개요
이 가이드에서는 UUID(범용 고유 식별자)라고도 하는 (GUIDs),(전역 고유 식별자)를 직렬화하는 방법에 대해 설명합니다.
팁
ObjectId
MongoDB 애플리케이션에서는 ObjectId 유형을 문서의 고유 식별자로 사용할 수 있습니다. 가능한 경우 MongoDB 애플리케이션에서 GUID 대신 ObjectId
인스턴스를 사용하는 것이 좋습니다.
MongoDB 의 GUID
GUID는 16바이트의 정수로, MongoDB 문서의 고유 ID로 사용할 수 있습니다. 다음 코드 블록은 GUID 예시를 보여줍니다.
00112233-4455-6677-8899-aabbccddeeff
원래 MongoDB는 GUID를 하위 유형 3의 BsonBinaryData
값으로 표현했습니다. 하위 유형 3은 인코딩 시 GUID의 바이트 순서를 표준화하지 않았기 때문에 MongoDB 드라이버마다 다른 바이트 순서로 GUID를 인코딩했습니다.
다음 탭은 이전 GUID의 다양한 드라이버 인코딩을 BsonBinaryData
하위 유형 3으로 보여 줍니다.
33221100-5544-7766-8899-aabbccddeeff
00112233-4455-6677-8899-aabbccddeeff
77665544-3322-1100-ffee-ddccbbaa9988
애플리케이션 전반에서 GUID 바이트 순서를 표준화하기 위해 모든 MongoDB 드라이버가 동일한 방식으로 인코딩하는 BsonBinaryData
하위 유형 4를 추가했습니다. 애플리케이션이션에서 GUID를 사용하는 경우 BsonBinaryData
하위 유형 4를 사용하여 GUID를 저장하는 것이 좋습니다.
모든 BsonBinaryData
하위 유형 목록은 BSONBinarySubtype API 열거형에 관한 문서를 참조하세요.
GUID 직렬화
모든 새로운 BsonBinaryData
GUID에 하위 유형 4를 사용하는 것이 좋지만, 이전 MongoDB 컬렉션 중 일부에는 하위 유형 3을 사용하는 일부 GUID 필드와 하위 유형 4를 사용하는 일부 GUID 필드가 포함될 수 있습니다. 이러한 차이점을 해결하기 위해 .NET/C# Driver는 개별 속성 수준에서 GUID 직렬화를 처리합니다.
.NET/C# 드라이버는 GuidRepresentation
열거형을 사용하여 다양한 BsonBinaryData
하위 유형을 나타냅니다. 다음 표는 GuidRepresentation
열거형 노드와 해당 BsonBinaryData
하위 유형을 보여줍니다.
GuidRepresentation 노드 | BsonBinaryData 하위 유형 |
---|---|
| 4 |
| 3 |
| 3 |
| 3 |
| N/A |
참고
CSharpLegacy
, JavaLegacy
및 PythonLegacy
GUID 표현은 모두 BsonBinaryData
하위 유형 3과 동일하지만 다른 바이트 순서를 사용합니다.
다음 섹션에서는 애플리케이션에서 GUID 표현을 구성할 수 있는 방법에 대해 설명합니다.
특성으로 구성
.NET/ C# 드라이버 를 사용하여 C# 클래스를 문서 스키마에 자동 매핑하는 경우 BsonGuidRepresentation
GUID 속성 에 특성을 추가하여 해당 표현을 지정할 수 있습니다. 이 속성은 GuidRepresentation 열거형 의 값을 허용합니다.
다음 코드 예시에서는 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 설명서를 참조하세요.