viewer.csslab.dev

UUID 생성기

v4 와 시간순 v7 을 한꺼번에 만들고, 이미 있는 UUID 의 버전도 읽는다.

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.
RFC 9562 §1

기능

v4 와 v7
버전 4 는 무작위이고 보통 기본값으로 쓴다. 버전 7 은 시간순이라 데이터베이스 인덱스가 흩어지지 않는다 — 무작위 키는 B-트리 삽입을 인덱스 전체에 흩뿌리고, 그 비용은 큰 테이블에서 쓰기 증폭으로 나타난다.
대량 생성
한 번에 1·5·10·50개를 만들고 목록 전체를 한 번에 복사한다. 픽스처를 심거나 테스트 테이블을 채울 때 쓴다.
형식 옵션
UUID 를 하이픈 없는 32자 문자열로 저장하는 시스템을 위해 대문자와 하이픈 제거를 지원한다.
기존 UUID 살펴보기
아무 UUID 나 붙여넣으면 버전과 변형을 읽어 주고, v7 이면 앞 6바이트에 박힌 시각까지 풀어 준다.
암호학적 난수
값은 브라우저의 crypto.randomUUID() 와 crypto.getRandomValues() 에서 나온다. Math.random() 이 아니므로 고유할 뿐 아니라 예측할 수도 없다.

사용법

  1. 1

    버전을 고른다

    그냥 무작위 식별자면 v4, 값이 생성 순서대로 정렬되기를 원하면 v7.

  2. 2

    개수를 정한다

    한 번에 하나부터 쉰 개까지 만든다.

  3. 3

    형식을 맞춘다

    받는 쪽이 그렇게 저장한다면 대문자로 바꾸거나 하이픈을 뗀다.

  4. 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 가 만들고 전송되지 않는다. 복사해 가는 값을 이 사이트를 포함해 누구도 본 적이 없다.

이 도구가 따르는 규격

함께 쓰는 도구