UUID v6 개요
UUID v6은 v1과 같은 필드를 쓰되 순서를 바꾼 버전입니다. v1은 타임스탬프를 중간 정밀도부터 시작하는 순서로 저장해서, 문자열로 정렬하면 시간순이 되지 않았습니다.
v6은 그 타임스탬프의 상위 비트를 맨 앞으로 옮겨 사전순 정렬이 곧 생성 순서가 되게 했습니다. 덕분에 v1 데이터를 넣던 자리에 그대로 쓸 수 있으면서도 인덱스 삽입이 순차적으로 일어납니다.
사용 방법
- v6을 선택합니다 (이 페이지에서는 이미 선택되어 있습니다).
- 필요하면 개수를 설정합니다. 최대 1000개까지 가능합니다.
- UUID 생성을 누릅니다. 결과는 생성 순서대로 정렬되어 있습니다.
- 전체 복사나 다운로드로 가져갑니다.
사용 사례
- v1을 쓰던 시스템에서 정렬 문제만 해결하고 싶을 때.
- 시간순으로 정렬되어야 하지만 v7과는 다른 정밀도가 필요할 때.
- 기존 v1 컬럼을 재설계하지 않고 마이그레이션할 때.
구조
앞 48비트가 타임스탬프의 상위 부분이고, 그다음 4비트가 버전 번호(6)입니다. 이어서 타임스탬프의 나머지 12비트, 시계 열번째 14비트, 노드 48비트가 옵니다.
UUID v6의 역할
| 옵션 | 사용 시점 |
|---|---|
v6 | v1과 같은 필드, 정렬되는 순서 |
v7 | 설계가 더 단순한 최신 시간 기반 버전 |
v1 | 정렬되지 않는 원래 순서 |
UUID 버전 한눈에 보기
| 버전 | 정렬 가능 | 값의 출처 | 적합한 용도 |
|---|---|---|---|
| v1 | 불가능 | 타임스탬프 + MAC 주소 | v1을 계속 쓰는 기존 시스템 |
| v3 | 불가능 | 이름의 MD5 해시 | MD5를 꼭 써야 하는 결정적 식별자 |
| v4 | 불가능 | 122비트 난수 | 대부분의 일반적인 고유 식별자 |
| v5 | 불가능 | 이름의 SHA-1 해시 | 같은 이름에서 항상 같은 식별자가 필요할 때 |
| v6 | 가능 | 재배열한 타임스탬프 | 난수성과 정렬을 함께 원할 때 |
| v7 | 가능 | 밀리초 단위 Unix 시간 | 데이터베이스 기본 키와 이벤트 식별자 |
| v8 | 불가능 | 사용자 정의 비트 레이아웃 | 사내 형식과 실험적 용도 |
일곱 버전 모두 128비트이고, 모두 같은 8-4-4-4-12 표기법으로 표현합니다. 차이는 각 비트가 무엇을 담는지뿐입니다.
코드 예제
javascript
// 라이브러리가 필요합니다
// 예: uuid v11+
import { v6 as uuidv6 } from 'uuid';
const id = uuidv6();
python
# Python 3.14+
import uuid
id = str(uuid.uuid6())
java
// 라이브러리가 필요합니다
csharp
// .NET 9+ (v7만 제공되며 v6은 없습니다)
sql
-- 보통 애플리케이션에서 생성합니다
자주 묻는 질문
v6과 v7 중 무엇을 골라야 하나요?
새로 만든다면 v7을 권합니다. 필드 구성이 더 단순하고 무작위 비트가 많습니다. v1에서 마이그레이션하는 상황이라면 v6이 자연스럽습니다.
v6은 생성 시각을 노출하나요?
네, 타임스탬프가 값 앞쪽에 그대로 들어 있어 생성 시각을 읽을 수 있습니다. 그 정보를 숨겨야 하면 v4를 쓰세요.
v6도 Timesort가 보장되나요?
밀리초보다 더 정밀한 단위까지 정렬됩니다. v1이 100나노초 단위 타임스탬프를 쓰므로 v6도 같은 정밀도를 유지합니다.