UUID v4 개요
UUID v4는 가장 널리 쓰이는 버전입니다. 버전 번호와 변형 번호가 차지하는 6비트를 빼면 남는 122비트가 전부 암호학적 난수라, 시간이나 하드웨어 주소처럼 추론할 수 있는 정보가 전혀 들어가지 않습니다.
아무런 식별 정보가 없기 때문에 v4는 생성 시각이나 기기 정보를 노출하지 않습니다. 대신 생성 순서대로 정렬할 수 없으므로, 데이터베이스 인덱스 키로 쓸 때는 보통 v7을 고릅니다.
사용 방법
- v4를 선택합니다 (이 페이지에서는 이미 선택되어 있습니다).
- 필요하면 개수를 설정합니다. 최대 1000개까지 가능합니다.
- UUID 생성을 누르거나 Ctrl + Enter를 누릅니다.
- 전체 복사나 다운로드 버튼으로 결과를 가져갑니다.
사용 사례
- 데이터베이스 기본 키와 분산 시스템의 고유 식별자.
- API가 돌려주는 리소스 ID, 요청 추적 ID, 세션 식별자.
- 정렬이 필요 없고 시간 정보도 드러내면 안 되는 모든 곳.
구조
13번째 16진수가 버전 번호(4)이고 17번째가 변형 번호(8, 9, a, b)입니다. 나머지 30자리 16진수는 모두 난수입니다.
UUID v4의 역할
| 옵션 | 사용 시점 |
|---|---|
v4 | 순수 난수이며 기본 선택 |
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
// 브라우저 및 Node 18+
const id = crypto.randomUUID();
python
import uuid
id = str(uuid.uuid4())
java
String id = java.util.UUID.randomUUID().toString();
csharp
var id = Guid.NewGuid().ToString();
sql
-- PostgreSQL 13+
SELECT gen_random_uuid();
자주 묻는 질문
v4가 겹칠 수 있나요?
122비트 난수의 조합 수는 2122, 약 5.3 × 1036입니다. 겹칠 확률이 50%가 되려면 약 2.7 × 1018개를 생성해야 하고, 1초에 10억 개를 만들어도 수십억 년이 걸립니다.
v4는 안전한가요?
난수 원천이 믿을 만하다면 안전합니다. 이 페이지는 브라우저의 Web Crypto API(crypto.getRandomValues)를 쓰며, 이는 RFC 4122가 v4에 요구하는 방식입니다.
v4를 정렬할 수 있나요?
할 수 없습니다. v4의 비트는 무작위로 흩어져 있어 사전순 정렬이 생성 순서와 일치하지 않습니다. 정렬 가능한 식별자가 필요하면 v7을 쓰세요.