UUID 란?
UUID 는 16진수 32자를 8-4-4-4-12 로 끊어 적는 128비트 식별자다. 중앙에 물어보지 않고 누구나 만들어도 충돌하지 않는다는 것이 요점이고, 그래서 여러 기계에서 동시에 만들어 내는 데이터베이스 키·요청 식별자·파일 이름에 쓴다.
이 생성기는 완전히 무작위인 버전 4 와, 앞 48비트가 밀리초 시각이라 생성 순서대로 정렬되는 버전 7 을 만든다. 이미 있는 UUID 를 넣으면 버전과 변형도 읽어 준다.
UUIDs are 128 bits long and are intended to guarantee uniqueness across space and time.
기능
- v4 와 v7
- 버전 4 는 무작위이고 보통 기본값으로 쓴다. 버전 7 은 시간순이라 데이터베이스 인덱스가 흩어지지 않는다 — 무작위 키는 B-트리 삽입을 인덱스 전체에 흩뿌리고, 그 비용은 큰 테이블에서 쓰기 증폭으로 나타난다.
- 대량 생성
- 한 번에 1·5·10·50개를 만들고 목록 전체를 한 번에 복사한다. 픽스처를 심거나 테스트 테이블을 채울 때 쓴다.
- 형식 옵션
- UUID 를 하이픈 없는 32자 문자열로 저장하는 시스템을 위해 대문자와 하이픈 제거를 지원한다.
- 기존 UUID 살펴보기
- 아무 UUID 나 붙여넣으면 버전과 변형을 읽어 주고, v7 이면 앞 6바이트에 박힌 시각까지 풀어 준다.
- 암호학적 난수
- 값은 브라우저의 crypto.randomUUID() 와 crypto.getRandomValues() 에서 나온다. Math.random() 이 아니므로 고유할 뿐 아니라 예측할 수도 없다.
사용법
- 1
버전을 고른다
그냥 무작위 식별자면 v4, 값이 생성 순서대로 정렬되기를 원하면 v7.
- 2
개수를 정한다
한 번에 하나부터 쉰 개까지 만든다.
- 3
형식을 맞춘다
받는 쪽이 그렇게 저장한다면 대문자로 바꾸거나 하이픈을 뗀다.
- 4
복사한다
전체 복사를 누르면 한 줄에 하나씩 목록 전체가 복사된다.
자주 묻는 질문
UUID v4 와 v7 은 뭐가 다른가?
v4 는 무작위 122비트라 두 값 사이에도, 시각과도 아무 관계가 없다. v7 은 무작위 부분 앞에 48비트 밀리초 시각을 붙여, 나중에 만든 값이 앞선 값 뒤로 정렬된다. UUID 가 기본키가 되거나 정렬될 것이면 v7 을, 순서가 드러나는 것이 곤란하면 v4 를 쓴다.
UUID 가 겹칠 수 있나?
원리상으로는 있지만 v4 에서는 사실상 없다. 무작위 122비트에서 충돌 확률이 50%가 되려면 대략 2.7 × 10^18 개를 만들어야 한다. 진짜 위험은 수학이 아니라 난수원이 약한 경우다. 이 도구가 Math.random() 대신 브라우저의 암호학적 생성기를 쓰는 이유다.
GUID 와 UUID 는 같은 건가?
실질적으로 같다. GUID 는 같은 128비트 식별자를 부르는 마이크로소프트의 이름이다. 오래된 마이크로소프트 도구가 중괄호로 감싸거나 대소문자를 섞어 출력하고 내부 바이트 순서를 달리 쓰기도 하지만, 값의 형식은 같다.
UUID 를 DB 기본키로 써도 되나?
식별자를 데이터베이스 바깥에서 만들어야 하거나 여러 시스템의 데이터를 합쳐야 한다면 합리적인 선택이다. 다만 무작위 v4 키는 삽입마다 다른 페이지에 떨어져 인덱스를 조각낸다. 그것이 문제라면 v7 을 쓴다 — 전역 고유성은 그대로 두면서 삽입이 순차적으로 일어난다.
이 UUID 들은 서버에서 만들어지나?
아니다. 브라우저의 Web Crypto API 가 만들고 전송되지 않는다. 복사해 가는 값을 이 사이트를 포함해 누구도 본 적이 없다.
이 도구가 따르는 규격
- RFC 9562 — 범용 고유 식별자(UUID) — RFC 4122 를 대체하는 현행 표준. 시간순 버전 7 이 여기서 들어왔다.
- RFC 9562 §5.7 — UUID 버전 7 — 이 도구가 되읽는 48비트 밀리초 시각 접두부를 정의한다.
- MDN — Crypto.randomUUID() — 여기서 쓰는 암호학적 난수 생성기. Math.random() 이 아니다.