GUID 개요
GUID는 Microsoft가 붙인 이름이고, 가리키는 대상은 128비트 UUID와 같습니다. 차이는 표기 관습뿐입니다. .NET과 SQL Server 문서에서는 대문자를 쓰고 중괄호로 감싼 형태를 예제로 자주 보여줍니다.
그래서 이 페이지는 대문자와 중괄호를 기본으로 켜 둡니다. 값을 만드는 방식은 v4와 같고, 표기만 .NET 쪽에 맞춰져 있습니다.
사용 방법
- GUID 생성을 누릅니다. 기본값은 대문자에 중괄호입니다.
- C# 코드에 넣을 때는 중괄호를 그대로 두고, 데이터베이스에 넣을 때는 끄는 편이 편합니다.
- SQL Server에서는
UNIQUEIDENTIFIER타입에 그대로 넣을 수 있습니다. - 전체 복사나 다운로드로 가져갑니다.
사용 사례
- SQL Server의
UNIQUEIDENTIFIER컬럼. - .NET의
Guid.Parse가 받아들이는 문자열 형식. - Active Directory와 Windows 시스템이 쓰는 식별자 형식.
구조
비트 배치는 UUID v4와 완전히 같습니다. 13번째 16진수가 버전(4), 17번째가 변형 번호입니다. 표기만 대문자에 중괄호가 붙습니다.
GUID의 역할
| 옵션 | 사용 시점 |
|---|---|
GUID | Microsoft 표기. 대문자와 중괄호를 기본으로 켭니다 |
UUID v4 | 같은 값이지만 소문자에 하이픈만 씁니다 |
UUID v7 | GUID가 필요하면서 정렬도 원할 때 |
UUID 버전 한눈에 보기
| 버전 | 정렬 가능 | 값의 출처 | 적합한 용도 |
|---|---|---|---|
| v1 | 불가능 | 타임스탬프 + MAC 주소 | v1을 계속 쓰는 기존 시스템 |
| v3 | 불가능 | 이름의 MD5 해시 | MD5를 꼭 써야 하는 결정적 식별자 |
| v4 | 불가능 | 122비트 난수 | 대부분의 일반적인 고유 식별자 |
| v5 | 불가능 | 이름의 SHA-1 해시 | 같은 이름에서 항상 같은 식별자가 필요할 때 |
| v6 | 가능 | 재배열한 타임스탬프 | 난수성과 정렬을 함께 원할 때 |
| v7 | 가능 | 밀리초 단위 Unix 시간 | 데이터베이스 기본 키와 이벤트 식별자 |
| v8 | 불가능 | 사용자 정의 비트 레이아웃 | 사내 형식과 실험적 용도 |
일곱 버전 모두 128비트이고, 모두 같은 8-4-4-4-12 표기법으로 표현합니다. 차이는 각 비트가 무엇을 담는지뿐입니다.
코드 예제
javascript
// 값은 같고 표기만 다릅니다
const id = crypto.randomUUID().toUpperCase();
const guid = `{${id}}`;
python
import uuid
id = "{%s}" % str(uuid.uuid4()).upper()
java
String guid = java.util.UUID.randomUUID().toString().toUpperCase();
csharp
var guid = Guid.NewGuid().ToString();
// 기본 형식이 대문자와 중괄호가 아닐 때는
var braces = Guid.NewGuid().ToString("B").ToUpperInvariant();
sql
DECLARE @g UNIQUEIDENTIFIER = NEWID();
SELECT UPPER(CONVERT(varchar(38), @g));
자주 묻는 질문
GUID와 UUID는 다른 건가요?
같은 것입니다. GUID는 Microsoft가 쓰는 이름이고 구조는 128비트 UUID와 동일합니다. 표기 관습만 조금 다릅니다.
대문자와 소문자 중 무엇이 맞나요?
둘 다 유효합니다. RFC 9562는 소문자를 권장하고, .NET 문서는 대문자를 자주 씁니다. 비교할 때는 대소문자를 무시하는 편이 안전합니다.
중괄호는 꼭 필요한가요?
아닙니다. 중괄호는 사람이 읽기 편하도록 붙이는 표기일 뿐이고, 값 자체에는 포함되지 않습니다. 데이터베이스에 넣을 때는 보통 떼어냅니다.