UUID 생성기
UUID v1/v3/v4/v5/v6/v7/v8, ULID, NanoID 생성 — 파서, 대량 생성, 딥링크 공유. 100% 브라우저 처리.
이 타입은 추가 옵션이 없습니다.
UUID란 무엇인가요?
UUID(Universally Unique Identifier, 범용 고유 식별자)는 중앙 조정 없이 분산 시스템에서 정보를 고유하게 식별하기 위한 128비트 숫자입니다. UUID는 2005년 RFC 4122를 대체한 RFC 9562(2024)에 정의되어 있습니다.
UUID는 01902e8c-5fa3-7b3f-b5de-8c5b8a2e7f1d처럼 8-4-4-4-12 형식의 16진수 32자로 표기됩니다. 13번째 문자는 버전(1-8)을, 17번째 문자의 상위 비트는 variant를 나타냅니다. 나머지 비트는 버전에 따라 타임스탬프, 네임스페이스 해시, 난수, 또는 사용자 정의 필드를 담습니다.
UUID 예제
아래 예제를 클릭하면 Parser 탭에 자동 로드되어 비트 분해를 볼 수 있습니다.
| 타입 | 설명 | 샘플 | 시도 |
|---|---|---|---|
| NIL UUID | 전체 0 특수 UUID | 00000000-0000-... | |
| MAX UUID | 전체 1 특수 UUID | ffffffff-ffff-... | |
| v1 | 시간 기반 (Gregorian 100ns) | c232ab00-9414-... | |
| v4 | 랜덤 (가장 일반적) | a1b2c3d4-e5f6-... | |
| v7 | 정렬 가능 (Unix ms + 랜덤) | 01902e8c-5fa3-... | |
| v5 (DNS) | SHA-1 네임스페이스 (DNS) | 2ed6657d-e927-... | |
| ULID | Crockford Base32, 26자 | 01HNQ8K9XM... | |
| NanoID | URL 안전, 간결 (21자) | V1StGXR8_Z5jdHi... | |
| PostgreSQL | gen_random_uuid() 결과 | 9f4eab3c-... | |
| Firestore | Firebase Firestore 문서 ID | dBc8xQq2jK... |
UUID 버전 비교
이 도구는 최신 식별자 포맷을 모두 지원합니다. 각 타입의 특징:
| 타입 | 비트 | 정렬 가능 | 결정론적 | 시간 노출 | 주요 용도 |
|---|---|---|---|---|---|
| v1 | 128 | 아니오 (바이트 순서) | 아니오 | 예 | 레거시 시스템 |
| v2 | 128 | 아니오 | 아니오 | 예 | DCE Security (레거시) |
| v3 | 128 | 아니오 | 예 (MD5) | 아니오 | 이름 기반 안정 ID |
| v4 | 128 | 아니오 | 아니오 | 아니오 | 세션/API 토큰 |
| v5 | 128 | 아니오 | 예 (SHA-1) | 아니오 | 이름 기반 안정 ID |
| v6 | 128 | 예 | 아니오 | 예 | v1 마이그레이션 |
| v7 | 128 | 예 | 아니오 | 예 | DB 기본 키 |
| v8 | 128 | 사용자 정의 | 사용자 정의 | 사용자 정의 | 실험적 |
| ULID | 128 | 예 | 아니오 | 예 | 간결한 정렬 ID |
| NanoID | 가변 | 아니오 | 아니오 | 아니오 | URL 슬러그, 단축 ID |
주요 사용 사례
- 데이터베이스 기본 키 — UUID v7은 시간순 INSERT가 B-tree 인덱스 지역성과 일치해 v4 대비 2-10배 빠릅니다.
- 세션 토큰 / API 키 — UUID v4가 올바른 선택입니다; 완전 랜덤으로 타임스탬프 유출이 없습니다.
- URL 슬러그 / 단축 코드 — 커스텀 길이·알파벳의 NanoID가 간결한 URL-safe ID를 생성합니다.
- 분산 추적 ID — UUID v7 또는 ULID가 고유성과 시간 정렬 두 가지를 모두 제공합니다.
- 네임스페이스 기반 ID — v3 (MD5) 또는 v5 (SHA-1)는 같은 입력에 같은 UUID를 생성하므로 중복 제거에 유용합니다.
- 이벤트 ID — v7 또는 ULID는 별도 타임스탬프 컬럼 없이 이벤트를 생성 시간순으로 정렬할 수 있게 합니다.
흔한 UUID 오류와 해결 방법
잘못된 UUID 형식
원인: 문자열이 8-4-4-4-12 hex 형식이 아닙니다. 공백, 누락된 하이픈, 비-hex 문자가 파서를 깨뜨립니다.
해결: 입력을 trim하고 하이픈 위치(8, 12, 16, 20)에서 정확히 32자 hex를 확인하세요. 이 도구의 Parser는 공백과 중괄호 {}를 자동 제거합니다 (.NET GUID 호환).
알 수 없는 UUID 버전
원인: 13번째 hex 문자가 1-8이 아니어서 version 필드가 스펙을 벗어났습니다.
해결: 원본 UUID가 올바르게 생성되었는지 확인하세요. 비표준 또는 손상된 UUID는 version 비트에 쓰레기 값을 가질 수 있습니다.
잘못된 variant 비트
원인: 17번째 hex 문자의 상위 2비트가 10(RFC 9562)이 아닙니다 — 예: variant 110(Microsoft)의 Apple NSUUID.
해결: UUID 출처를 확인하세요. RFC 9562 variant는 해당 위치에서 8, 9, a, b로 시작합니다.
네임스페이스 UUID 필요
원인: v3 또는 v5를 선택했으나 네임스페이스 UUID와 이름이 제공되지 않았습니다.
해결: 표준 네임스페이스(DNS, URL, OID, X.500)를 선택하거나 유효한 커스텀 UUID를 제공하고, 이름 문자열을 입력하세요.
알파벳에 중복 문자 (NanoID)
원인: 커스텀 NanoID 알파벳에 반복 문자가 있어 분포가 편향됩니다.
해결: 모두 고유한 문자로 알파벳을 제공하세요. 도구는 생성 전에 중복을 거부합니다.
언어별 UUID 생성
모든 주요 언어가 내장 또는 잘 관리되는 라이브러리를 통해 UUID를 지원합니다:
| 언어 | 패키지 | v4 예시 | v7 참고 |
|---|---|---|---|
| Node.js | crypto (built-in) | crypto.randomUUID() | npm install uuid → v7() |
| Python | uuid (built-in) | uuid.uuid4() | Python 3.14+: uuid.uuid7() |
| Java | java.util.UUID | UUID.randomUUID() | com.github.f4b6a3:uuid-creator |
| Go | github.com/google/uuid | uuid.NewString() | uuid.NewV7() |
| .NET/C# | System | Guid.NewGuid() | UUIDNext NuGet package |
| PHP | ramsey/uuid | Uuid::uuid4() | Uuid::uuid7() |
| Ruby | SecureRandom (built-in) | SecureRandom.uuid | uuid7 gem |
사용 방법
- 생성 탭에서 타입(v4, v7, v1, v3, v5, v6, v8, ULID, NanoID)을 선택합니다.
- 필요한 경우 옵션을 설정합니다 (v3/v5는 네임스페이스+이름, v8은 커스텀 hex, NanoID는 길이+알파벳).
- 개수(1-1,000)를 입력하고 생성을 클릭합니다.
- 전체 복사를 사용하거나 CSV/JSON/TXT로 다운로드하세요.
- 기존 UUID나 ULID를 분석하려면 파서 탭으로 전환 — 버전, variant, 타임스탬프, 비트 분해를 표시합니다.
- v1/v6/v7 결과에서 Timestamp Decoder에서 열기를 클릭하면 추출한 타임스탬프를 다른 시간대로 변환할 수 있습니다.
UUID v4 vs UUID v7 vs ULID
| 항목 | UUID v4 | UUID v7 | ULID |
|---|---|---|---|
| 시간순 정렬 | ❌ | ✅ | ✅ |
| DB INSERT 성능 | 낮음 (랜덤 산포) | 우수 (순차) | 우수 (순차) |
| 랜덤 비트 | 122 | 74 | 80 |
| 주요 용도 | 세션 토큰, API 키 | DB 기본 키 (현대) | 간결한 정렬 ID |
| 브라우저/Node 지원 | 네이티브 (crypto.randomUUID) | 라이브러리 (uuid npm) | 라이브러리 (ulid npm) |
기술 레퍼런스
각 UUID 버전별 RFC 9562 비트 레이아웃 (총 128비트):
| 버전 | 타임스탬프 | Version | Variant | 랜덤/데이터 | 기타 |
|---|---|---|---|---|---|
| v1 | 60비트 Gregorian 100ns | 4 | 2 | 14 clock_seq | 48 node |
| v3 | — | 4 | 2 | 122 MD5 hash | — |
| v4 | — | 4 | 2 | 122 랜덤 | — |
| v5 | — | 4 | 2 | 122 SHA-1 hash | — |
| v6 | 60비트 (재정렬) | 4 | 2 | 14 clock_seq | 48 node |
| v7 | 48비트 Unix ms | 4 | 2 | 12 rand_a + 62 rand_b | — |
| v8 | 사용자 정의 | 4 | 2 | 122 사용자 정의 | — |
| ULID | 48비트 Unix ms | — | — | 80 랜덤 | Crockford Base32 (26자) |
| NanoID | — | — | — | 가변 랜덤 | 커스텀 알파벳 + 길이 |
자주 묻는 질문
UUID v7은 세션 토큰으로 안전한가요?
아니요. UUID v7은 앞 48비트에 Unix 밀리초 타임스탬프를 내장하여 예측 가능합니다. 세션 토큰, API 키 등 예측 불가능성이 필요한 용도에는 UUID v4(완전 랜덤)나 CSPRNG 기반 전용 토큰을 사용하세요.
UUID v2는 어떻게 된 건가요?
UUID v2(DCE Security)는 원본 스펙에 정의되어 있지만 실제로는 거의 사용되지 않습니다. Python uuid, Java UUID, Go google/uuid 등 주요 라이브러리 대부분이 구현하지 않습니다. 본 도구는 디버깅 용도로 Parser에서 v2를 인식하지만 생성은 지원하지 않습니다 — 사실상 레거시입니다.
PostgreSQL 18이 uuidv7()을 추가한 이유는?
UUID v7은 시간 순으로 정렬되어 v4보다 훨씬 좋은 primary key가 됩니다. PostgreSQL 18(2025년 9월 릴리스)은 벤치마크에서 v4 대비 2-10배 INSERT 성능 향상(순차 인덱스 쓰기)을 보여 네이티브 uuidv7() 함수를 추가했습니다.
UUID v4를 생성 시간순으로 정렬할 수 있나요?
아니요. UUID v4는 완전 랜덤이며 시간 정보를 포함하지 않습니다. 시간 정렬이 필요하면 UUID v7, UUID v6, 또는 ULID를 사용하세요. 모두 타임스탬프를 내장하여 생성 시간순 사전식 정렬이 가능합니다.
ULID가 UUID v7보다 좋은가요?
같은 문제(시간 정렬 ID)를 해결하지만 포맷이 다릅니다. ULID는 Crockford Base32 26자로 UUID의 하이픈 포함 36자보다 더 간결합니다. UUID v7은 RFC 표준이며 도구 지원이 더 넓습니다. 간결함이 필요하면 ULID, 표준 준수가 중요하면 v7을 선택하세요.
NanoID의 고유성은 UUID 대비 어떤가요?
기본 NanoID(64자 알파벳 21자)는 UUID v4와 동등한 충돌 확률을 갖습니다 — 1% 충돌까지 약 149경 개 생성이 필요합니다. 더 짧은 NanoID는 고유성이 약해지며, 36자 알파벳 8자 ID는 약 37만 개에서 1% 충돌에 도달합니다.
UUID가 충돌할 수 있나요?
이론상 가능하지만 UUID v4의 경우 확률이 천문학적으로 낮습니다 — 두 특정 UUID가 같을 확률은 약 1/2^122입니다. 50% 충돌 확률에 도달하려면 약 2.7 quintillion(270경)개 생성이 필요합니다. 실무에서는 전역 고유로 취급합니다.
UUID는 정말 전역 고유한가요?
"전역 고유" 보장은 128비트 길이와 암호학적으로 강한 난수(v4) 또는 타임스탬프+난수(v7)에서 비롯됩니다. 적절한 CSPRNG를 사용한다면 생성 가능한 모든 UUID 공간에서의 충돌은 무시할 수 있는 수준입니다.
UUID를 여기에 붙여넣어도 안전한가요?
네. 모든 처리는 브라우저 JavaScript 안에서만 이뤄집니다. 데이터가 서버로 전송되지 않습니다. 브라우저 개발자 도구의 Network 탭을 열어 페이지 로드 후 네트워크 요청이 없음을 직접 확인하실 수 있습니다.
Node.js crypto.randomUUID()는 왜 v4만 지원하나요?
crypto.randomUUID()는 v4(랜덤)만 반환하도록 표준화된 Web Crypto API 메서드입니다. v7 등 다른 버전은 npm의 uuid 외부 라이브러리가 필요합니다. Python의 uuid 모듈도 마찬가지로 v4 위주이며, uuid7()은 Python 3.14에서 추가되었습니다.
기능
🆔 멀티 버전 생성기
v1, v3, v4, v5, v6, v7, v8, ULID, NanoID를 하나의 통합 인터페이스에서 생성합니다.
🔍 파서 & 시각화
UUID를 붙여넣으면 비트 분해를 확인 — 버전, variant, 타임스탬프, 랜덤 세그먼트가 컬러로 표시됩니다.
📦 대량 생성
최대 1,000개 ID를 한 번에 생성하고 CSV, JSON, TXT로 다운로드 — 테스트 데이터나 마이그레이션에 적합합니다.
💻 코드 스니펫
Node.js, Python, Java, Go, .NET, PHP, Ruby용 UUID 생성 코드를 바로 복사할 수 있습니다.
🔗 URL 딥링크
URL로 도구 상태를 공유: ?type=v7&count=100 또는 ?action=parse&uuid=....
🔒 100% 브라우저 처리
모든 생성이 브라우저에서 이뤄집니다. 데이터가 서버로 전송되지 않아 프로덕션에서도 안전합니다.
개인정보 보호 및 보안
이 도구는 Web Crypto API(crypto.randomUUID, crypto.getRandomValues, crypto.subtle.digest)를 사용해 모든 처리를 로컬에서 수행합니다. 서버로 전송되는 데이터는 없습니다. 개발자 도구 Network 탭에서 확인하실 수 있습니다. 세션 토큰이나 API 키 등 보안에 민감한 용도에는 UUID v4(완전 랜덤)를 선택하고, 생성 시간이 노출되는 v1/v6/v7은 피하세요.