UUID 생성

브라우저 안에서만 처리됩니다. 입력한 내용과 선택한 파일은 서버로 전송되지 않습니다.

버전
표기
v4 — 전부 무작위

122비트가 난수입니다. 순서 정보가 없어 언제 만들었는지 알 수 없고, 그래서 값 자체로 시각이 새지 않습니다. 로그 추적용 아이디, 외부에 노출되는 식별자, 파일 이름처럼 순서가 필요 없는 곳에 씁니다.

crypto.randomUUID 가 없어(보안 컨텍스트가 아닐 때 생깁니다) 같은 난수원으로 직접 만듭니다. 결과는 같은 규격입니다.

결과 (0개)

가지고 있는 UUID 를 붙여넣으면 몇 버전인지, v7 이면 언제 만들어졌는지 알려 줍니다.

사용법

  1. 버전을 고릅니다. 데이터베이스 기본키로 쓸 거라면 v7, 그 밖에는 v4 가 무난합니다.
  2. 개수를 고르고 "다시 만들기"를 누르면 그만큼 한 번에 만들어집니다(최대 1만 개).
  3. 하이픈·대문자·중괄호 표기를 켜고 끄면 이미 만들어진 값의 표기만 바뀝니다. 값 자체는 그대로라 복사해 둔 것과 어긋나지 않습니다.
  4. "UUID 뜯어보기"에 가지고 있는 값을 붙여넣으면 몇 버전인지, v7 이면 언제 만들어졌는지 알려 줍니다.

자주 묻는 질문

v4 와 v7 중 무엇을 써야 하나요?

데이터베이스에 저장하는 기본키라면 v7 을 권합니다. v7 은 앞 48비트가 만든 시각이라 값이 시간순으로 늘어서고, B-트리 인덱스의 끝에만 붙기 때문에 삽입이 인덱스 여기저기를 건드리지 않습니다. v4 는 완전히 무작위라 인덱스 전체에 흩뿌려져 쓰기가 느려지고 캐시 적중률이 떨어집니다. 반대로 값에서 시각이 읽히면 곤란한 자리(공개되는 초대 링크, 주문 번호처럼 순서를 감추고 싶은 곳)에는 v4 가 맞습니다. v1 은 예전에 쓰이던 방식인데 MAC 주소가 값에 들어가 권하지 않습니다.

UUID 가 겹칠 확률은 얼마나 되나요?

v4 는 122비트가 무작위입니다. 초당 10억 개씩 100년을 만들어도 한 번이라도 겹칠 확률이 약 50억 분의 1입니다. 현실적으로는 겹치지 않는다고 봐도 됩니다. 다만 그 전제는 난수가 제대로 된 것이어야 한다는 점입니다 — 이 도구는 브라우저의 crypto.randomUUID(없으면 crypto.getRandomValues)를 씁니다. 서버 코드에서 Math.random 으로 UUID 를 만드는 구현은 실제로 충돌한 사례가 있습니다.

v7 은 같은 밀리초에 여러 개를 만들면 순서가 섞이지 않나요?

이 도구는 섞이지 않습니다. RFC 9562 가 제시한 방법 중 "12비트 전용 카운터"를 씁니다 — 같은 밀리초 안에서는 카운터를 1씩 올리므로 만든 순서와 문자열 정렬 순서가 정확히 같습니다. 밀리초가 바뀌면 카운터를 난수로 다시 뿌리되 위쪽 비트를 비워 두어 그 밀리초 안에서 넘치지 않게 합니다. 한 밀리초에 4,096개를 넘겨 만들면 시각을 1ms 당겨 써서 순서를 지킵니다. 시계가 거꾸로 가도(NTP 보정 등) 마지막에 쓴 시각을 유지합니다.

v7 에 담긴 시각은 어떤 시각인가요?

1970년 1월 1일 UTC 부터의 밀리초입니다. 앞 12자리(하이픈 제외)를 16진수로 읽으면 그 값이 그대로 나옵니다. "뜯어보기"에 넣으면 ISO 8601 로 바꿔 보여 줍니다. 이 시각은 값을 만든 기기의 시계에서 읽은 것이라, 시계가 틀린 기기에서 만들었다면 그 시각도 틀립니다.

중괄호가 붙은 표기는 뭔가요?

윈도우의 레지스트리와 COM 에서 쓰는 GUID 표기입니다. {01234567-89ab-...} 처럼 중괄호로 감쌉니다. UUID 와 GUID 는 같은 것을 가리키는 다른 이름이고, 표기만 다릅니다. 이 도구는 하이픈을 지운 뒤 중괄호를 씌우므로 하이픈 없는 중괄호 표기도 만들 수 있습니다.

대문자로 써도 되나요?

규격은 만들 때 소문자로 쓰고 읽을 때는 대소문자를 모두 받아들이라고 정합니다. 그래서 소문자가 기본이고, 대문자가 필요한 시스템(일부 윈도우 도구, 오래된 데이터베이스)에서만 대문자 옵션을 쓰면 됩니다. 문자열로 비교하는 코드에서는 대소문자가 섞이면 같은 UUID 가 다른 값으로 취급되니 한쪽으로 통일해 저장하세요.