전역 고유 식별자
1. 개요
전역 고유 식별자(GUID)는 128비트 숫자로, 소프트웨어 및 시스템에서 객체를 고유하게 식별하는 데 사용된다. 16진수로 표현되며, 일반적으로 하이픈으로 구분된 32자리의 문자열 또는 중괄호로 묶인 형태로 표기한다. 초기 GUID 생성 알고리즘은 MAC 주소를 기반으로 하여 개인 정보 및 보안 문제를 야기했으나, 이후 난수를 사용하여 이 문제를 해결했다. GUID는 마이크로소프트 COM, DCOM, 오피스 문서, ASF, RSS, Atom 등 다양한 분야에서 인터페이스, 클래스, 문서, 스트림 등을 식별하는 데 활용된다.
-
고유 식별자 -
MAC 주소
MAC 주소는 네트워크 장치를 식별하는 고유한 48비트 식별자로, IEEE 802 MAC 주소로 알려져 있으며, 최근 스푸핑 악용 및 개인 정보 보호를 위한 랜덤화 기술이 논의되고 있다. -
고유 식별자 -
범용 상품 부호
범용 상품 부호(UPC)는 소매점에서 상품을 식별하기 위해 상품 포장에 인쇄되는 널리 사용되는 바코드의 일종으로, 12자리 숫자로 구성된 UPC-A를 포함한 다양한 변형이 존재한다. -
식별자 -
아카이벌 리소스 키
아카이벌 리소스 키(ARK)는 디지털, 물리적, 추상적 자원의 영구적인 식별을 위한 체계로, 분산된 웹 환경에서 관리 주체의 약속을 통해 객체의 보존과 접근성을 제공하며, ARK Alliance가 국제적인 사용을 장려하고 한국에서도 활용된다. -
식별자 -
바코드
2. 기본 구조
GUID는 16바이트, 즉 128비트 숫자이다. 16진수로 표현하면 다음과 같은 형태이다.
: 3F 25 04 E0 4F 89 11 D3 9A 0C 03 05 E8 2C 33 01
GUID를 텍스트로 표현하는 방법은 구현에 따라 다를 수 있지만, 일반적으로는 GUID를 순서대로 4바이트, 2바이트, 2바이트, 8바이트로 나눈 뒤 하이픈으로 구분하여 16진수로 작성하고 중괄호로 묶는 방식을 사용한다.
: {3F2504E0-4F89-11D3-9A0C0305E82C3301}
자료 구조로 사용할 때는 다음과 같은 형태가 일반적이다.
3. 텍스트 표기
GUID는 16바이트, 즉 128비트 숫자이다. 특별히 규정된 텍스트 표현이 없기 때문에, GUID를 텍스트로 쓰는 방법은 구현에 따라 다를 수 있다.
GUID의 표기에는 일반적으로 다음과 같은 16진 표기가 사용된다.
:3F2504E0-4F89-11D3-9A0C-0305E82C3301
이 텍스트 표기는 다음과 같은 32자리 구조를 가진다.
# Data1:3F2504E0(8자리)
# 하이픈
# Data2:4F89(4자리)
# 하이픈
# Data3:11D3(4자리)
# 하이픈
# Data4의 처음 2 항목:9A 0C(4자리)
# 하이픈
# Data4의 나머지 6 항목:03 05 E8 2C 33 01(12자리)
GUID를 순서대로 4바이트, 2바이트, 2바이트, 8바이트로 나눈 뒤 하이픈으로 구분하여 16진수로 작성하고 중괄호(브레이스)로 묶어서 표기하는 경우도 많다.
:{3F2504E0-4F89-11D3-9A0C-0305E82C3301}
4. 알고리즘
초기 GUID 생성 알고리즘(V1 GUID)은 사용자 네트워크 카드의 MAC 주소를 기반으로 생성되어 개인 정보 및 보안 문제를 야기할 수 있다는 비판을 받았다. 이 헛점은 멜리사(웜) 개발자를 찾는 데 사용되기도 하였다. MAC 주소를 사용하는 V1 GUID는 세 번째 숫자 그룹의 첫 번째 숫자에 "1"을 사용한다. (예: {2f1e4fc0-81fd-11da-9156-00036a0f876a}) 이후 알고리즘은 MAC 주소 대신 임의의 숫자를 사용하여 개인 정보 및 보안 문제를 해결하였으며, 세 번째 숫자 그룹의 첫 번째 숫자에 "4"를 사용한다. (예: {38a52be4-9352-453e-af97-5c3b448652f0})
5. GUID의 사용
마이크로소프트 컴포넌트 오브젝트 모델(COM)에서는 GUID를 구성 요소의 인터페이스들을 구별하기 위해 사용한다. 즉 서로 호환되지 않을 수 있는 두 개의 컴포넌트가 동일한 인터페이스 이름을 사용하더라도, 각각의 인터페이스는 언제나 고유한 GUID를 갖기 때문에 구별할 수 있게 된다.
COM에서 사용하는 GUID는 다음과 같다.
| GUID 종류 | 설명 |
|---|---|
| IID | 인터페이스 식별자 |
| CLSID | 클래스 식별자 |
| LIBID | 타입 라이브러리 식별자 |
| CATID | 카테고리 식별자 (이 식별자가 클래스에 있으면, 해당 클래스가 특정 클래스 카테고리에 속한다는 것을 표시한다) |
DCOM은 다음과 같은 GUID를 추가로 더 사용한다.
| GUID 종류 | 설명 |
|---|---|
| AppID | 응용 프로그램 식별자 |
| MID | 기계 식별자 |
| IPID | 인터페이스 포인터 식별자 (RPC 용 인터페이스에 사용) |
| CID | 커젤러티(causality) 식별자 (RPC 세션에 사용) |
| OID | 오브젝트 식별자 (오브젝트 인스턴스에 사용) |
| OXID | 오브젝트 익스포터 식별자 (RPC를 수행하는 시스템 오브젝트의 인스턴스에 사용) |
| SETID | 핑 셋 식별자 (오브젝트 그룹에 사용) |
위의 GUID들은 쓰이는 형태가 서로 다르다면, 값이 중복되어도 문제가 되지 않는다. 예를 들어, 한 클래스의 CLSID와 다른 클래스의 IID가 서로 같더라도 두 클래스는 문제 없이 존재할 수 있다. 그러나 같은 CLSID를 가지는 두 개의 서로 다른 클래스가 존재하는 것은 불가능하다.
GUID는 또한 마이크로소프트 오피스 프로그램에서 작성한 문서에도 삽입된다. 능동 스트리밍 포맷(Advanced Streaming Format, ASF)에서는 각각의 오디오 및 비디오 스트림들에 GUID를 할당하여 식별한다.
RSS의 일부 버전과 Atom에는 글 또는 웹로그 포스트를 유일하게 구별할 수 있도록 각각 guid 태그와 id 태그를 가지고 있지만, 이들의 쓰임은 조금 다르다. RSS의 guid 태그에는 어떠한 문자열도 사용할 수 있으며, 실제로는 일반적으로 포스트된 URL을 사용한다. Atom의 id 태그에는 반드시 유효한 URI를 사용해야 한다.
* COM(Component Object Model)에서 사용되는 객체 식별을 위한 클래스 ID, 인터페이스 ID 등.
* MSBuild에서 사용되는 프로젝트 ID 등.