전역 고유 식별자

전역 고유 식별자(全域固有識別子, )는 응용 소프트웨어에서 사용되는 유사난수이다. GUID는 생성할 때 항상 유일한 값이 만들어진다는 보장은 없지만, 사용할 수 있는 모든 값의 수가 2128 = 3.4028×1038개로 매우 크기 때문에, 적절한 알고리즘이 있다면 같은 숫자를 두 번 생성할 가능성은 매우 적다.

GUID는 오라클 데이터베이스 등 많은 곳에서 쓰이지만, 가장 눈에 띄는 구현은 아마도 마이크로소프트의 구현일 것이다. 표준으로는 오픈 소프트웨어 파운데이션(Open Software Foundation, OSF)이 지정한 범용 고유 식별자(Universally Unique Identifier, UUID)가 있다.

GUID는 '그위드'라 발음하는데, 이는 특히 마이크로소프트에 의해 사용된다. 다른 발음으로는 '구이드'가 있다.

 기본 구조 
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진수로 작성하고 중괄호로 묶는 방법이 있다. 다음은 위의 GUID를 이 방법으로 표현한 것이다.

 {3F2504E0-4F89-11D3-9A0C0305E82C3301}

비슷하게, 자료 구조로 사용할 때는 다음과 같은 형태가 가장 일반적이다.

 시작 위치(비트)  끝 위치(비트)  형식  guiddef.h의 C 자료형[1] 0  31  32비트 부호없는 정수  unsigned long 32  47  16비트 부호없는 정수  unsigned short 48  63  16비트 부호없는 정수  unsigned short 64  127  8비트 부호없는 정수 8개  unsigned char[8]
 [1] C 자료형은 컴파일러에 따라 크기가 다를 수 있다.

 알고리즘 
새로운 GUID를 생성하는 OSF의 알고리즘(V1 GUID)은 광범위한 비판을 받고 있다. 이 알고리즘은 GUID의 마지막 숫자 그룹을 생성할 때 사용자 네트워크 카드의 MAC 주소를 기반으로서 사용하기 때문에, 특정 문서를 작성한 컴퓨터를 추적하는 일 등이 가능하도록 하고 있다. 이러한 헛점은 멜리사(Melissa) 웜을 만든 개발자를 찾는데 사용되기도 하였다.

MAC 주소를 사용하는 V1 GUID는 {2f1e4fc0-81fd-11da-9156-00036a0f876a}와 같이 세 번째 숫자 그룹의 첫 번째 숫자에 "1"을 사용한다. 이후의 알고리즘을 사용하는 GUID는 MAC 주소 대신 임의의 숫자를 사용하며, {38a52be4-9352-453e-af97-5c3b448652f0}처럼 숫자 "4"를 사용한다.

 GUID의 사용 
마이크로소프트 컴포넌트 오브젝트 모델(COM)에서는 GUID를 구성 요소의 인터페이스들을 구별하기 위해 사용한다. 즉 서로 호환되지 않을 수 있는 두개의 컴포넌트가 동일한 인터페이스 이름을 사용하더라도, 각각의 인터페이스는 언제나 고유한 GUID를 갖기 때문에 구별할 수 있게 된다.

COM에서 사용하는 GUID는 다음과 같다:
 IID - 인터페이스 식별자
 CLSID - 클래스 식별자
 LIBID - 타입 라이브러리 식별자
 CATID - 카테고리 식별자 (이 식별자가 클래스에 있으면, 해당 클래스가 특정 클래스 카테고리에 속한다는 것을 표시한다)

DCOM은 다음과 같은 GUID를 추가로 더 사용한다:
 AppID - 응용 프로그램 식별자
 MID - 기계 식별자
 IPID - 인터페이스 포인터 식별자 (RPC 용 인터페이스에 사용)
 CID - 커젤러티(causality) 식별자 (RPC 세션에 사용)
 OID - 오브젝트 식별자 (오브젝트 인스턴스에 사용)
 OXID - 오브젝트 익스포터 식별자 (RPC를 수행하는 시스템 오브젝트의 인스턴스에 사용)
 SETID - 핑 셋 식별자 (오브젝트 그룹에 사용)

위의 GUID들은 쓰이는 형태가 서로 다르다면, 값이 중복되어도 문제가 되지 않는다. 예를 들어, 한 클래스의 CLSID와 다른 클래스의 IID가 서로 같더라도 두 클래스는 문제 없이 존재할 수 있다. 그러나 같은 CLSID를 가지는 두 개의 서로 다른 클래스가 존재하는 것은 불가능하다.

GUID는 또한 마이크로소프트 오피스 프로그램에서 작성한 문서에도 삽입된다. 능동 스트리밍 포맷(Advanced Streaming Format, ASF)에서는 각각의 오디오 및 비디오 스트림들에 GUID를 할당하여 식별한다.

 XML 기반 배급 포맷 
RSS의 일부 버전과 Atom에는 글 또는 웹로그 포스트를 유일하게 구별할 수 있도록 각각 guid 태그와 id 태그를 가지고 있지만, 이들의 쓰임은 조금 다르다. RSS의 guid 태그에는 어떠한 문자열도 사용할 수 있으며, 실제로는 일반적으로 포스트된 URL을 사용한다. Atom의 id 태그에는 반드시 유효한 URI를 사용해야 한다.

 같이 보기 
 범용 고유 식별자

 외부 링크 
  InstanceId 값을 위한 DmaId (DCE 범용 고유 식별자, UUIDs)
  범용 고유 식별자 (UUIDs) DCE variant의 문법과 의미
  (샘플 코드를 포함하고 있는) Draft UUID specification
  범용 고유 식별자 (UUID) URN Namespace
  웹 UUID (GUID) 생성기

분류:식별자
분류:고유 식별자