UUID 디코더 및 유효성 검사기 - 버전 및 시간 분석
위에 있는 필드에 UUID를 입력하시면, 이 도구(UUID 파서)가 즉시 온라인 검사를 수행하여 버전, 유효성 및 숨겨진 정보를 추출합니다.
UUID 디코더란 무엇인가요?
UUID 디코더는 UUID(범용 고유 식별자)를 분석하고 거기에서 사용 가능한 모든 정보를 추출하는 도구입니다. UUID는 단순히 임의의 문자열이 아닙니다. 버전에 따라 타임스탬프, 시스템 정보 또는 결정론적 데이터의 해시를 포함할 수 있습니다.
UUID에서 어떤 정보를 얻을 수 있나요?
UUID 기본 정보
UUID 버전:
- UUID의 유형 및 구조를 결정합니다 (v1, v3, v4, v5, v6, v7)
- 13번째 16진수 문자에서 추출됨
변형:
RFC 4122- 표준 UUID 변형NCS- 네트워크 컴퓨팅 시스템 (지원 중단)Microsoft- 마이크로소프트 GUID 변형Reserved- 향후 사용을 위해 예약됨
UUID v1 - 타임스탬프 + MAC 주소
얻을 수 있는 정보:
- ✅ 정확한 생성 시간 - 100나노초 정밀도의 날짜 및 시간
- ✅ 클록 시퀀스 - 충돌 방지를 위한 시퀀스 번호
- ✅ 노드 ID - 원래 MAC 주소였으나, 종종 무작위 값으로 사용됨
예시:
UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
버전: v1 (타임스탬프 + MAC)
변형: RFC 4122
날짜 및 시간: 1997년 10월 15일 04:25:33.000
클록 시퀀스: 724
노드 ID: 00:C0:4F:D4:30:C8
사용:
- 레코드가 생성된 시점 확인
- 감사 및 포렌식 분석
- 시간 의존적 문제 디버깅
UUID v3/v5 - 해시 기반
얻을 수 있는 정보:
- ✅ 해시 유형 - MD5 (v3) 또는 SHA-1 (v5)
- ❌ 얻을 수 없음 - 원래 네임스페이스 및 이름 (단방향 해시)
예시:
UUID: 886313e1-3b8a-5372-9b90-0c9aee199e5d
버전: v5 (SHA-1 해시)
변형: RFC 4122
유형: 해시 기반 UUID (결정론적)
참고: 원래 네임스페이스와 이름은 UUID에서 다시 얻을 수 없습니다
사용:
- UUID가 결정론적인지 확인
- 데이터베이스에서 UUID 유형 식별
- 해시 기반 식별자의 일관성 확인
UUID v4 - 무작위
얻을 수 있는 정보:
- ✅ 버전 - 무작위임을 확인
- ✅ 변형 - RFC 4122 표준
- ❌ 추가 데이터 없음 - 순전히 무작위 비트
예시:
UUID: f47ac10b-58cc-4372-a567-0e02b2c3d479
버전: v4 (무작위)
변형: RFC 4122
유형: 무작위로 생성된 UUID
사용:
- UUID가 무작위인지 확인 (결정론적이지 않음)
- 올바른 UUID 형식 확인
- 데이터베이스에 저장하기 전 UUID 유효성 검사
UUID v6 - 정렬된 타임스탬프
얻을 수 있는 정보:
- ✅ 정확한 생성 시간 - DB 성능 향상을 위해 재정렬됨
- ✅ 클록 시퀀스 - 시퀀스 번호
- ✅ 노드 ID - 노드 식별자
예시:
UUID: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
버전: v6 (정렬된 타임스탬프)
변형: RFC 4122
날짜 및 시간: 2026년 01월 30일 14:23:45.123
클록 시퀀스: 3272
노드 ID: 9E:6B:DE:CE:D8:46
사용:
- 레코드 생성 시간 확인
- DB에서 시간순 정렬 분석
- 분산 시스템 디버깅
UUID v7 - 유닉스 타임스탬프
얻을 수 있는 정보:
- ✅ 유닉스 타임스탬프 - 1970년 1월 1일 이후 밀리초
- ✅ 날짜 및 시간 - 표준 유닉스 타임스탬프 형식
- ❌ 무작위 부분 - 디코딩 불가능
예시:
UUID: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
버전: v7 (유닉스 타임스탬프)
변형: RFC 4122
날짜 및 시간: 2026년 01월 30일 14:23:45.123
사용:
- 현대 UUID의 생성 시간 확인
- 시간순 정렬 분석
- 타임스탬프가 있는 데이터 마이그레이션
UUID 구조
UUID 형식: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
6ba7b810-9dad-11d1-80b4-00c04fd430c8
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ └───────────┴─ Node (48 비트)
│ │ │ │ │ │ └──┴─────────────── Clock Sequence (14 비트)
│ │ │ │ └──┴────────────────────── Varianta (2-3 비트)
│ │ └──┴───────────────────────────── Verze (4 비트) + Time High
│ └──────────────────────────────────── Time Mid (16 비트)
└─────────────────────────────────────────── Time Low (32 비트)
버전 및 변형 추출
버전 (M):
- 위치: 13번째 16진수 문자
- 값: 1-7 (다양한 UUID 버전)
변형 (N):
- 위치: 17번째 16진수 문자
0-7: NCS (예약됨)8-B: RFC 4122 (표준)C-D: 마이크로소프트E-F: 미래 (예약됨)
실제 사례
디버깅 - 레코드 생성 시간 확인
시나리오: 사용자가 데이터가 사라졌다고 보고합니다. 레코드가 언제 생성되었는지 확인해야 합니다.
UUID: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
디코딩됨: 1997년 10월 15일 04:25:33.000
→ 레코드는 1997년에 생성되었습니다
포렌식 분석 - 시간 순서 검증
시나리오: 이벤트가 올바른 순서로 발생했는지 확인합니다.
UUID 1: 1ec9414c-232a-6b00-b3c8-9e6bdeced846 → 2026년 01월 30일 14:23:45
UUID 2: 1ec9414d-557b-6a00-8f32-1234567890ab → 2026년 01월 30일 14:25:12
→ UUID 2가 나중에 생성되었습니다 (올바른 순서)
데이터베이스에서 UUID 유형 식별
시나리오: DB에 혼합된 UUID가 있으며, 어떤 것이 무작위이고 어떤 것이 타임스탬프를 포함하는지 알아야 합니다.
f47ac10b-58cc-4372-a567-0e02b2c3d479 → v4 (무작위, 타임스탬프 없음)
6ba7b810-9dad-11d1-80b4-00c04fd430c8 → v1 (타임스탬프 있음)
017f22e2-79b0-7cc3-98c4-dc0c0c07398f → v7 (타임스탬프 있음)
→ v1 및 v7 UUID만 시간 정보를 포함합니다
제한 사항 및 얻을 수 없는 정보
❌ UUID v3/v5 - 해시 디코딩 불가
불가능:
- 원래 네임스페이스를 다시 얻는 것
- 원래 이름/값을 다시 얻는 것
- 어떤 데이터가 해시되었는지 확인하는 것
이유: MD5와 SHA-1은 단방향 해시 함수입니다.
❌ UUID v4 - 숨겨진 데이터 없음
불가능:
- 어떤 메타데이터도 얻는 것
- 생성 시간을 확인하는 것
- 소스를 식별하는 것
이유: UUID v4는 순전히 무작위이며, 구조화된 정보를 포함하지 않습니다.
⚠️ UUID v1/v6 - 노드 ID는 무작위일 수 있습니다
제한 사항:
- 현대 구현에서는 노드 ID가 종종 무작위이며 (실제 MAC 주소가 아님)
- 개인 정보 보호를 위해 MAC 주소는 종종 무작위 값으로 대체됩니다
- 특정 머신을 신뢰할 수 있게 식별할 수 없습니다
UUID 유효성 검사
디코더는 UUID 유효성 검사기로도 작동합니다.
UUID 유효성 확인
디코더는 자동으로 다음을 검증합니다:
- ✅ 올바른 형식 (8-4-4-4-12 16진수 문자)
- ✅ 유효한 16진수 문자 (0-9, a-f)
- ✅ 올바른 길이 (하이픈 포함 36자, 미포함 32자)
유효하지 않은 UUID 인식
유효하지 않은 예시:
❌ 6ba7b810-9dad-11d1-80b4 (너무 짧음)
❌ 6ba7b810-9dad-11d1-80b4-GHIJKLMN (유효하지 않은 문자)
❌ 6ba7b81-09dad-11d1-80b4-00c04fd4 (잘못된 형식)
개발자를 위한 정보
자바스크립트 구현
// UUID에서 버전 추출
function getUUIDVersion(uuid) {
const cleaned = uuid.replace(/-/g, '');
return parseInt(cleaned[12], 16);
}
// UUID v7에서 타임스탬프 추출
function extractV7Timestamp(uuid) {
const cleaned = uuid.replace(/-/g, '');
const timeHi = parseInt(cleaned.substring(0, 8), 16);
const timeLow = parseInt(cleaned.substring(8, 12), 16);
const unixMs = Number(BigInt("0x" + cleaned.substring(0, 12)) >> 16n);
return new Date(unixMs);
}
// 예시
const uuid = '017f22e2-79b0-7cc3-98c4-dc0c0c07398f';
console.log(getUUIDVersion(uuid)); // 7
console.log(extractV7Timestamp(uuid)); // Date object
정규 표현식을 이용한 UUID 유효성 검사
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
function isValidUUID(uuid) {
return uuidRegex.test(uuid);
}
자주 묻는 질문 (FAQ)
UUID v4에서 생성 시간을 얻을 수 있나요?
아니요, UUID v4는 순전히 무작위이며 시간 정보를 포함하지 않습니다. 시간을 포함하는 UUID의 경우 v1, v6 또는 v7을 사용하세요.UUID v1에서 노드 ID가 MAC 주소 대신 무작위인 이유는 무엇인가요?
현대 구현은 개인 정보 보호를 위해 무작위 노드 ID를 사용합니다. 실제 MAC 주소를 공개하는 것은 보안 위험이 될 수 있습니다.UUID v5에서 원래 URL 또는 이름을 다시 얻을 수 있나요?
아니요, UUID v5는 단방향인 SHA-1 해시를 사용합니다. 해시에서 원래 데이터를 다시 얻을 수 없습니다.UUID가 무작위(v4)인지 어떻게 알 수 있나요?
디코더가 UUID 버전을 표시합니다. 버전이 4인 경우, 추가 메타데이터가 없는 무작위로 생성된 UUID입니다.UUID v1의 타임스탬프는 정확한가요?
네, UUID v1은 이론적으로 100나노초의 정확도를 가집니다 (1582년 10월 15일부터). 실제로는 시스템 시계의 정확성에 따라 달라집니다.디코더를 UUID 유효성 검사에 사용할 수 있나요?
네, 디코더는 UUID 형식을 자동으로 검증하며, UUID가 유효하지 않은 경우 오류를 표시합니다.보안 및 개인 정보 보호
UUID는 무엇을 공개하나요?
UUID v1/v6:
- ⚠️ 생성 시간 - 작업 타이밍을 노출할 수 있습니다
- ⚠️ 잠재적으로 MAC 주소 - 장치 식별 위험 (현대 구현에서는 무작위)
UUID v4:
- ✅ 안전함 - 메타데이터를 포함하지 않습니다
UUID v7:
- ⚠️ 유닉스 타임스탬프 - 생성 시간을 노출합니다
권장 사항
- ✅ 최대 개인 정보 보호를 위해 UUID v4를 사용하세요
- ⚠️ 공개 API에서 UUID v1/v6/v7 사용에 주의하세요 (시간 정보를 노출합니다)
- ✅ UUID v5는 결정론적이지만, 원래 데이터를 노출하지 않습니다
- ⚠️ MD5 해시는 완전히 안전하지 않습니다
흥미로운 사실
- 가장 오래된 UUID v1: 1582년 10월 15일 00:00:00 (그레고리력 시작)
- 가장 최신 UUID v7: 10889년 8월 2일 05:31:50.655 (밀리초 단위 유닉스 타임스탬프 한계)
- UUID v1 정확도: 100나노초 (이론적으로 초당 천만 개의 UUID)
- UUID Nil:
00000000-0000-0000-0000-000000000000(특수 “빈” UUID) - UUID Max:
ffffffff-ffff-ffff-ffff-ffffffffffff(최대 값)
다양한 시스템에서의 사용
PostgreSQL
-- UUID 버전 추출
SELECT substring(id::text, 15, 1) as version
FROM users;
-- 버전에 따른 필터링
SELECT *
FROM users
WHERE substring(id::text, 15, 1) = '4';
MySQL
-- UUID 형식 확인
SELECT id
FROM users
WHERE id REGEXP '^[0-9a-f]{8}-[0-9a-f]{4}-[1-7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$';