구조
timestamp (60-bit) + clock seq (14-bit) + MAC (48-bit)
충돌 위험
Very low
장점
단점
최적 용도
Legacy systems. Avoid in new projects due to MAC address exposure.
구조
MD5(namespace UUID + name) → UUID
충돌 위험
MD5 collision risk (low for UUIDs)
장점
단점
최적 용도
Generating UUIDs from URLs, email addresses, or other stable identifiers. Use v5 instead.
구조
122 random bits + 4-bit version + 2-bit variant
충돌 위험
Negligible (2^122 possibilities)
장점
단점
최적 용도
Default choice for most applications. IDs for records, sessions, tokens.
구조
SHA-1(namespace UUID + name) → UUID (top 128 bits)
충돌 위험
SHA-1 — extremely low for UUID purposes
장점
단점
최적 용도
Deterministic IDs from a namespace + name. Example: UUID for 'https://example.com' is always the same.
구조
Unix ms timestamp (48-bit) + version (4-bit) + random (74-bit)
충돌 위험
Very low (74 random bits)
장점
단점
최적 용도
Database primary keys where sort order matters. Replaces v1 for time-ordered UUIDs.
구조
128 bits, content defined by the implementation
충돌 위험
Depends on implementation
장점
단점
최적 용도
Experimental or vendor-specific use cases where v1–v7 don't fit.
| Version | Method | Sortable | Privacy-safe | Deterministic |
|---|---|---|---|---|
| v1 | Time + MAC | ✅ | ❌ (MAC leak) | ❌ |
| v3 | MD5 hash | ❌ | ✅ | ✅ |
| v4 | Random | ❌ | ✅ | ❌ |
| v5 | SHA-1 hash | ❌ | ✅ | ✅ |
| v7 | Time + Random | ✅ | ✅ | ❌ |
| v8 | Custom | — | — | — |
// JavaScript / Node.js (built-in, Node 15+)
import { randomUUID } from 'crypto';
const v4 = randomUUID(); // → "550e8400-e29b-41d4-a716-446655440000"
// Browser
const v4 = crypto.randomUUID();
// UUID v7 (npm: uuid package v10+)
import { v7 as uuidv7 } from 'uuid';
const v7 = uuidv7(); // → "018f0b2d-4c9e-7abc-89de-f012345678ab"
// Python
import uuid
v4 = str(uuid.uuid4()) # Random
v5 = str(uuid.uuid5(uuid.NAMESPACE_URL, 'https://example.com'))
# PostgreSQL
SELECT gen_random_uuid(); -- v4 (pg 13+)
SELECT uuid_generate_v4(); -- v4 (uuid-ossp extension)
SELECT gen_random_uuid()::text; -- as textULID는 컴팩트한 대안: 48비트 타임스탬프 + 80비트 무작위, Crockford Base32 26문자로 인코딩. 생성 시간에 따라 사전식으로 정렬됩니다.
순차적 ID는 단일 데이터베이스 애플리케이션에서 더 간단하고 효율적입니다. UUID가 필요한 경우:
-- PostgreSQL: 네이티브 UUID 타입 (16바이트, 효율적)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
-- MySQL: 성능을 위해 BINARY(16)으로 저장
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
UUID v4는 암호학적 소스에서 122비트의 무작위성을 사용하여 좋은 엔트로피를 제공합니다. 그러나 보안 토큰 (API 키, 세션 ID)에는 체크섬, 만료 인코딩, 접두사 식별 같은 추가 속성이 있는 전용 토큰 포맷을 사용하는 것이 좋습니다. UUID는 신원용이지 인증용이 아닙니다.
UUID(Universally Unique Identifier)는 RFC 4122에 표준화된 128비트 식별자입니다. 하이픈으로 구분된 8-4-4-4-12 16진수 문자로 형식화됩니다. 중앙 기관 없이 공간과 시간을 초월하여 고유하도록 설계되었습니다.
대부분의 일반적인 목적에는 v4를 사용하세요 — 무작위로 생성되며 충돌 확률이 매우 낮습니다. 데이터베이스 기본 키에 시간순 UUID가 필요한 경우 v7을 사용하세요. 네임스페이스+이름 쌍에서 결정론적 UUID가 필요한 경우 v5를 사용하세요.
UUID v4는 순수하게 무작위(122 무작위 비트)입니다. UUID v7은 처음 48비트에 Unix 타임스탬프를 인코딩하고 그 뒤에 무작위 비트가 옵니다. 이로 인해 v7 UUID는 생성 시간별로 정렬 가능하여 데이터베이스의 B-tree 인덱스 성능이 크게 향상됩니다.
실용적으로는 그렇습니다. UUID v4는 122개의 무작위 비트를 가지며 2^122 ≈ 5.3 × 10^36개의 가능한 값을 제공합니다. 50%의 충돌 확률을 가지려면 약 2.7 × 10^18개의 UUID를 생성해야 합니다.