UUID v4의 구조와 무작위성
UUID v4는 128비트로 구성되며, 이 중 122비트가 순수 난수(random)로 채워집니다. 나머지 6비트는 고정된 버전(0100, 즉 4)과 변형(variant, 10xx)을 나타내기 위해 예약되어 있습니다. 따라서 UUID v4 표기 형식 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx에서 4와 y는 각각 버전과 변형을 의미하며, y의 상위 2비트는 항상 10입니다. 이 도구는 122비트의 고품질 난수를 브라우저 내장 crypto.getRandomValues 또는 crypto.randomUUID를 사용해 생성합니다. 모든 연산은 로컬에서 이루어지므로 서버로 전송되는 데이터는 없습니다.
충돌 확률과 실제 의미
122비트 엔트로피는 약 5.3 × 10³⁶개의 고유한 값을 제공합니다. 생일 공격(birthday problem)을 적용하더라도 10억 개의 UUID를 생성했을 때 단 한 번의 충돌이 발생할 확률은 10⁻¹⁸ 미만입니다. 이 도구는 최대 100개의 UUID를 한 번에 생성하므로 충돌 가능성은 실용적으로 0에 가깝습니다. 충돌 걱정 없이 분산 시스템에서 세션 ID, API 토큰, 이벤트 식별자로 사용할 수 있습니다. 단, 완전한 예측 불가능성이 요구되는 암호학적 용도(예: 비밀번호 리셋 토큰)에서는 UUID v4 자체가 아닌 더 긴 무작위 문자열을 권장합니다.
데이터베이스 인덱싱에 미치는 영향
UUID v4 값은 시간 순서 없이 완전히 무작위로 분포합니다. 이를 데이터베이스 기본 키로 사용하면 **B-트리 인덱스가 심하게 조각화(fragmentation)**됩니다. 새 행이 삽입될 때마다 인덱스의 임의 위치에 페이지 분할이 발생하고, 클러스터형 인덱스(MySQL InnoDB 등)에서는 디스크 쓰기 성능이 크게 저하됩니다. 반면 UUID v7이나 타임스탬프 기반 식별자는 시간적으로 정렬되어 인덱스에 순차적으로 쌓이므로 쓰기 처리량이 높습니다. 이 도구는 이러한 트레이드오프를 인지한 개발자가 분산 환경에서 충돌 없이 식별자를 할당해야 할 때 사용됩니다. 인덱스 성능이 중요하다면 v7 또는 ULID를 고려해야 합니다.
시간 기반 식별자와의 비교
이 도구의 드롭다운에는 UUID v4 외에도 v7, ULID, NanoID가 있습니다. UUID v7은 타임스탬프를 앞부분에 배치하여 시간 순서 정렬이 가능합니다. ULID는 26자 Crockford Base32로 더 짧고 정렬 가능합니다. NanoID는 사용자 정의 길이와 문자 집합을 제공합니다. 각 형식의 용도:
| 형식 | 정렬 가능성 | 길이 | 엔트로피 소스 |
|---|---|---|---|
| UUID v4 | 아니오 | 36자 (하이픈 포함) | 122비트 랜덤 |
| UUID v7 | 예 (밀리초 단위) | 36자 | 48비트 타임스탬프 + 74비트 랜덤 |
| ULID | 예 (밀리초 단위) | 26자 | 48비트 타임스탬프 + 80비트 랜덤 |
| NanoID | 설정 가능 | 기본 21자 | 21 * log₂(64) ≈ 126비트 |
v4는 시간 정보를 전혀 노출하지 않음이 장점입니다. API 키처럼 외부에 생성 시점을 숨겨야 하는 경우 v4가 적합합니다.
형식 사용자 정의 옵션
이 페이지는 UUID v4 특유의 두 가지 토글을 제공합니다.
- 대문자 사용 (Uppercase): 기본값은 소문자(a–f)입니다. 대문자(A–F)로 설정하면 일부 시스템(예: Active Directory, 일부 파일 시스템)에서의 호환성이 높아지지만, 기본 RFC 4122는 소문자를 권장합니다. 대문자/소문자 혼용에 민감한 데이터베이스에서는 일관성을 유지해야 합니다.
- 하이픈 포함 (Include hyphens): 하이픈을 제거하면 32자 문자열이 됩니다. URL 쿼리 매개변수나 파일 이름에 사용할 때 공간을 절약하고 특수 문자를 피할 수 있습니다. 단, 표준 UUID 형식에서 벗어나므로 일부 파서가 인식하지 못할 수 있습니다.
두 옵션을 변경하면 즉시 모든 ID가 다시 생성됩니다. 카운트는 1~100 사이의 정수만 허용하며, 범위를 벗어난 값은 입력 자체가 차단됩니다.
브라우저 측 생성의 장점
모든 UUID 생성은 사용자 브라우저에서만 이루어집니다. 서버에 네트워크 요청을 보내지 않으므로 지연 시간이 0에 가깝고, 개인정보가 유출될 위험이 없습니다. 특히 보안 엔지니어가 API 토큰이나 요청 ID를 생성할 때 서버 로그에 식별자가 남지 않도록 보장할 수 있습니다. 또한 오프라인 상태에서도 도구가 정상 작동합니다(캐시된 페이지라면). 생성된 각 UUID를 클릭하면 개별 복사, "모두 복사" 버튼으로 일괄 복사가 가능합니다.
자주 묻는 질문 (FAQ)
Q1. UUID v4의 충돌 확률은 얼마나 되나요?
A. 122비트 랜덤성으로 인해 1초에 10억 개씩 생성해도 수천 년 동안 충돌이 발생할 확률이 50% 미만입니다. 실용적으로 무시할 수 있는 수준입니다.
Q2. 하이픈을 제거해도 UUID v4의 고유성은 유지되나요?
A. 예. 하이픈은 단순한 구분자일 뿐이며, 32개의 16진수 문자 자체가 128비트 정보를 그대로 담고 있습니다.
Q3. 대문자 UUID와 소문자 UUID는 다른 UUID인가요?
A. 기술적으로 동일한 128비트 값을 나타내지만, 문자열 비교 시 대소문자를 구분하는 시스템에서는 다른 값으로 취급될 수 있습니다. JSON, XML, SQL 등 대부분의 현대 시스템은 대소문자를 구분하므로 일관된 케이스를 사용해야 합니다.
Q4. 왜 데이터베이스 기본 키로 UUID v4를 권장하지 않나요?
A. 무작위 삽입으로 인한 인덱스 페이지 분할과 클러스터형 인덱스의 심각한 조각화로 쓰기 성능이 저하됩니다. 대신 시간 정렬 UUID v7이나 순차적 ID(예: auto-increment)가 더 적합합니다.
Q5. 이 도구는 인터넷 없이도 사용할 수 있나요?
A. 페이지가 한 번 로드되면 모든 생성 로직이 로컬에서 실행되므로 오프라인에서도 정상 작동합니다. 단, 첫 로딩 시에는 인터넷 연결이 필요합니다.
Q6. "모두 복사" 후 상태 메시지가 바뀌나요?
A. 예. 복사가 완료되면 상태 메시지가 "복사 완료!"로 변경됩니다. 개별 클릭 시에는 해당 ID만 복사되며 상태 메시지는 바뀌지 않습니다.