UUID 생성기 — v4·v7·v5 만들기와 UUID 뜯어보기
겹치지 않는 식별자를 만듭니다. 무작위 v4, 시간순으로 정렬되는 v7, 같은 이름이면 항상 같은 값이 나오는 v5를 고를 수 있고, 표기 형식을 바꾸거나 한 번에 1,000개까지 만들 수 있습니다.
UUID는 128비트 숫자를 16진수 32자로 적고 8-4-4-4-12로 끊어 쓴 식별자입니다. 여러 서버가 각자 만들어도 겹치지 않기 때문에, 미리 번호를 나눠 받지 않고도 데이터베이스 키나 파일 이름으로 쓸 수 있습니다.
예전 버전은 v4만 만들면서도 안내에는 버전을 고를 수 있다고 적혀 있었고, 브라우저에 crypto.randomUUID가 없으면 Math.random으로 만들었습니다. Math.random은 예측이 가능해 식별자로 쓰기에 적절하지 않습니다. 지금은 항상 암호학적 난수를 쓰고, 그것이 없는 환경에서는 만들지 않습니다.
어떤 버전을 쓸까
| 버전 | 특징 | 쓰는 곳 |
|---|---|---|
| v4 | 완전 무작위(122비트) | 가장 흔한 선택. 순서가 필요 없는 모든 곳 |
| v7 | 앞 48비트가 생성 시각(밀리초) + 나머지는 무작위 | 데이터베이스 기본키. 만든 순서대로 정렬됩니다 |
| v5 | 네임스페이스와 이름을 SHA-1로 계산 | 같은 입력에 항상 같은 ID가 필요할 때(예: URL → ID) |
왜 v7이 데이터베이스에 유리한가
v4는 값이 완전히 흩어져 있어서, 새 행을 넣을 때마다 인덱스의 서로 다른 위치를 건드립니다. 데이터가 많아질수록 이 무작위 접근이 쓰기 성능을 떨어뜨립니다. v7은 앞부분이 시각이라 새로 만든 값이 항상 뒤에 붙습니다. 인덱스 끝부분만 계속 쓰게 되어 캐시 적중률이 높습니다.
이 도구의 v7은 같은 밀리초 안에서 만들어진 값도 순서가 유지되도록 12비트 카운터를 넣습니다. 한 번에 5개를 만들어 보면 값이 오름차순으로 나옵니다. 다만 v7에는 생성 시각이 그대로 들어 있으므로, 만든 시점을 숨겨야 하는 곳에는 v4를 쓰세요.
v5와 UUID 뜯어보기
v5는 네임스페이스(DNS·URL·OID·X.500)와 이름을 합쳐 SHA-1로 계산합니다. 같은 입력이면 어디서 계산하든 같은 값이 나오므로, 외부 시스템의 문자열 키를 UUID로 바꿔야 할 때 유용합니다. 예를 들어 DNS 네임스페이스에 www.example.com을 넣으면 언제나 2ed6657d-e927-568b-95e1-2665a8aea6a2가 됩니다. 표준 문서의 예시값과 같은지 확인했습니다.
'UUID 확인하기' 칸에 값을 붙여넣으면 버전과 만들어진 시각을 읽어 줍니다. v1과 v7에는 시각이 들어 있어 언제 만든 값인지 알 수 있습니다. 예를 들어 위 DNS 네임스페이스 UUID는 v1이고 1998년에 만들어진 값입니다.
표기 형식과 기타
- •기본·하이픈 없음·중괄호·URN 네 가지 표기를 고를 수 있습니다. 중괄호는 윈도우·닷넷에서, 하이픈 없는 형태는 URL이나 파일 이름에서 자주 씁니다.
- •대문자 표기도 지원합니다. 표준은 소문자를 권장하지만, 값을 비교할 때는 대소문자를 구분하지 않습니다.
- •한 번에 1,000개까지 만들어 한꺼번에 복사할 수 있습니다.
- •v4가 겹칠 확률은 사실상 0입니다. 흔히 드는 비유로, 초당 10억 개를 85년 동안 만들어야 한 번 겹칠 확률이 50%가 됩니다.
자주 묻는 질문
UUID를 비밀번호나 토큰으로 써도 되나요?
v4는 122비트 무작위라 추측하기 어렵지만, 세션 토큰에는 전용 라이브러리를 쓰는 편이 안전합니다. v7과 v1은 시각이 들어 있어 예측 가능한 부분이 있으니 쓰지 마세요.
UUID 대신 짧은 ID를 쓰고 싶어요.
36자가 부담이면 하이픈 없는 32자나, 같은 무작위성을 Base62로 줄인 형식을 쓰기도 합니다. 다만 다른 시스템과 주고받을 때는 표준 형식이 가장 안전합니다.
만든 UUID가 저장되나요?
아니요. 생성과 확인 모두 브라우저 안에서만 이루어집니다.
