UUID v8 개요
UUID v8은 RFC 9562가 마련한 확장 지점입니다. 버전 번호와 변형 번호가 차지하는 6비트만 고정이고, 나머지 122비트는 설계자가 원하는 대로 쓸 수 있습니다.
예를 들어 샤드 번호, 리전 코드, 일련번호를 앞쪽에 배치하고 나머지를 난수로 채우면, 정렬과 분산을 한 값 안에서 함께 다룰 수 있습니다. 대신 그 레이아웃을 읽는 코드는 직접 작성해야 합니다.
사용 방법
- v8을 선택합니다 (이 페이지에서는 이미 선택되어 있습니다).
- 필요하면 개수를 설정합니다. 최대 1000개까지 가능합니다.
- UUID 생성을 누릅니다.
- 전체 복사나 다운로드로 가져갑니다.
사용 사례
- 샤드나 리전 정보를 식별자에 함께 담아야 하는 분산 데이터베이스.
- 정렬 가능한 자체 식별자 규격을 이미 갖고 있는 시스템.
- 프로토콜 실험이나 사내 전용 형식.
구조
13번째 16진수가 버전(8), 17번째가 변형 번호로 고정됩니다. 나머지 122비트의 배치는 전적으로 애플리케이션이 정합니다.
UUID v8의 역할
| 옵션 | 사용 시점 |
|---|---|
v8 | 직접 정의한 레이아웃이 필요할 때만 |
v7 | 정렬이 목적이라면 이미 해결되어 있습니다 |
v4 | 특별한 요구가 없다면 기본 선택 |
UUID 버전 한눈에 보기
| 버전 | 정렬 가능 | 값의 출처 | 적합한 용도 |
|---|---|---|---|
| v1 | 불가능 | 타임스탬프 + MAC 주소 | v1을 계속 쓰는 기존 시스템 |
| v3 | 불가능 | 이름의 MD5 해시 | MD5를 꼭 써야 하는 결정적 식별자 |
| v4 | 불가능 | 122비트 난수 | 대부분의 일반적인 고유 식별자 |
| v5 | 불가능 | 이름의 SHA-1 해시 | 같은 이름에서 항상 같은 식별자가 필요할 때 |
| v6 | 가능 | 재배열한 타임스탬프 | 난수성과 정렬을 함께 원할 때 |
| v7 | 가능 | 밀리초 단위 Unix 시간 | 데이터베이스 기본 키와 이벤트 식별자 |
| v8 | 불가능 | 사용자 정의 비트 레이아웃 | 사내 형식과 실험적 용도 |
일곱 버전 모두 128비트이고, 모두 같은 8-4-4-4-12 표기법으로 표현합니다. 차이는 각 비트가 무엇을 담는지뿐입니다.
코드 예제
javascript
// 레이아웃을 직접 정의합니다
// 예: 앞 32비트는 샤드, 나머지는 난수
const id = uuidv8();
python
# Python 3.14+
import uuid
id = str(uuid.uuid8(0x1234, 0x5678))
java
// 라이브러리나 직접 구현이 필요합니다
csharp
// .NET 9에는 v7까지만 제공됩니다
sql
-- 보통 애플리케이션에서 생성합니다
자주 묻는 질문
v8을 언제 써야 하나요?
v4나 v7로 해결되지 않는 요구가 있을 때만 쓰세요. 예를 들어 값 안에 샤드 정보를 넣어야 하거나, 사내 규격이 이미 정해져 있는 경우입니다.
v8은 표준인가요?
네. RFC 9562가 정의한 정식 버전이고, UUID 형식 자체는 다른 버전과 동일합니다. 다만 안쪽 비트의 의미는 애플리케이션마다 다릅니다.
다른 시스템에서도 읽을 수 있나요?
UUID 형식으로는 유효하기 때문에 어떤 라이브러리든 파싱은 됩니다. 다만 안쪽 비트를 해석하려면 그 레이아웃을 아는 코드가 필요합니다.