UUID v1 개요
UUID v1은 RFC 4122가 처음 정의한 시간 기반 버전입니다. 100나노초 단위 그레고리력 타임스탬프 60비트와 노드 식별자 48비트, 그리고 시계 열번째(clock sequence)로 구성됩니다.
원래 규격은 노드 자리에 기기의 MAC 주소를 넣도록 했지만, 그러면 기기 정보가 그대로 노출됩니다. 이 페이지는 RFC 4122가 허용하는 대로 무작위 노드 값을 사용합니다.
사용 방법
- v1을 선택합니다 (이 페이지에서는 이미 선택되어 있습니다).
- 필요하면 개수를 설정합니다. 최대 1000개까지 가능합니다.
- UUID 생성을 눌러 결과를 확인합니다.
- 전체 복사나 다운로드로 가져갑니다.
사용 사례
- v1만 받아들이는 기존 데이터베이스나 사내 시스템.
- 생성 시각을 값에서 직접 읽어야 하는 진단 도구.
- v1 스키마에서 마이그레이션하기 전 단계의 호환용 식별자.
구조
앞 60비트가 100나노초 단위 타임스탬프이고, 그다음 4비트가 버전 번호(1)입니다. 남은 12비트는 시계 열번째, 48비트는 노드 식별자입니다.
UUID v1의 역할
| 옵션 | 사용 시점 |
|---|---|
v1 | 가장 오래된 시간 기반 형식. 호환용으로 남아 있습니다 |
v7 | 같은 시간 기반이지만 설계가 현대적이고 정렬이 더 정확합니다 |
v6 | 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 14.17+
import { v1 as uuidv1 } from 'uuid';
const id = uuidv1();
python
import uuid
id = str(uuid.uuid1())
java
// java.util.UUID는 v4만 생성하므로 라이브러리가 필요합니다
csharp
// .NET에는 v1 생성기가 없습니다
sql
-- 이식성이 좋지 않아 보통 애플리케이션에서 생성합니다
자주 묻는 질문
v1은 왜 기기 정보를 노출한다고 하나요?
원래 규격이 노드 자리에 MAC 주소를 넣도록 했기 때문입니다. 이 페이지는 RFC 4122가 함께 허용하는 무작위 노드 값을 쓰므로, 값에서 사용자의 기기를 유추할 수 없습니다.
v1과 v6은 무엇이 다른가요?
비트 구성은 사실상 같고 순서만 다릅니다. v6은 타임스탬프의 상위 비트를 앞으로 옮겨 사전순 정렬이 시간순과 일치하게 만든 버전입니다.
지금도 v1을 써야 하나요?
새로 만드는 시스템이라면 v7을 권합니다. v1은 기존 시스템과 맞춰야 하거나 생성 시각을 값에서 직접 읽어야 할 때만 쓰세요.