UUID 생성기 소개
이 무료 UUID 생성기는 무작위 버전 4 UUID(GUID라고도 합니다)를 만듭니다. UUID는 데이터베이스, API, 로그 파일, 분산 시스템에서 사용되는 범용 고유 식별자입니다. 하나만 만들 수도 있고 한 번에 여러 개를 만들 수도 있으며, 클릭 한 번으로 복사할 수 있습니다.
UUID는 암호화 키에 사용되는 것과 동일한 암호학적으로 안전한 난수원인 crypto.getRandomValues를 사용해 브라우저 안에서 생성됩니다. 서버에 아무것도 요청하지 않으므로 여기에서 보시는 모든 UUID는 다른 어디에도 존재한 적이 없습니다.
UUID란 무엇인가
UUID는 128비트 숫자로, 32개의 16진수 자리를 하이픈으로 구분한 다섯 그룹으로 표기합니다.
f47ac10b-58cc-4372-a567-0e02b2c3d479
그룹 구분은 8-4-4-4-12이며, 하이픈을 포함한 전체 길이는 항상 36자입니다.
UUID의 핵심은 누구에게도 묻지 않고 고유한 ID를 만들어 내는 것입니다. 데이터베이스는 다음 값이 무엇인지에 대한 유일한 권한을 가지므로 1, 2, 3…을 차례로 발급할 수 있습니다. 하지만 두 대의 휴대폰이 오프라인 상태로 레코드를 만들 때, 열두 대의 서버가 동시에 행을 삽입할 때, 또는 행이 존재하기 *전에* ID가 필요할 때는 물어볼 권한이 없습니다. UUID는 충돌을 고민할 가치조차 없을 만큼 크고 무작위적이라는 점으로 이 문제를 해결합니다.
버전 4, 그리고 그것을 드러내는 두 자리
UUID에는 여러 버전이 있습니다. 버전 4가 무작위 방식이며, 거의 모든 사람이 "UUID"라고 할 때 가리키는 것이 바로 이것입니다.
버전은 문자열에서 바로 읽을 수 있습니다. f47ac10b-58cc-4372-a567-0e02b2c3d479에서는 다음과 같습니다.
- 세 번째 그룹의 첫 자리가 버전입니다. 여기서는 4입니다
- 네 번째 그룹의 첫 자리가 변형(variant)입니다. 항상 8, 9, a, b 중 하나입니다
이 두 자리는 고정되어 있으므로 실제 무작위성은 128비트가 아니라 122비트가 됩니다.
만나실 수 있는 다른 버전들도 있습니다. v1은 타임스탬프와 기기의 MAC 주소를 담고 있어 정렬은 가능하지만 어디에서 언제 만들어졌는지가 새어 나갑니다. 2024년에 표준화된 v7은 현대적인 해답입니다. 앞쪽에 타임스탬프를, 그 뒤에 무작위 값을 두므로 하드웨어 정보를 노출하지 않으면서도 ID가 생성 시각순으로 정렬됩니다. 지금 선택하시는 중이고 데이터베이스의 정렬 순서가 중요하다면 v7을 알아 둘 만합니다.
정말로 고유한가요?
보장되지는 않지만, 숫자가 워낙 터무니없이 커서 문제가 되지 않습니다.
122비트의 무작위성은 약 5.3 × 10³⁶가지 값을 만들어 냅니다. 단 한 번의 충돌이 일어날 확률이 50%에 이르려면 대략 2.7 × 10¹⁸개, 즉 270경 개의 UUID를 생성해야 합니다.
구체적으로 말하면, 매초 10억 개의 UUID를 생성한다고 해도 전체 집합 어딘가에서 중복이 하나 생길 확률이 50%가 되기까지 약 85년이 걸립니다. 실제 어떤 애플리케이션에서든, 이 위험은 저장 장치가 값을 조용히 손상시킬 위험보다 작습니다.
유일하게 실질적인 주의점은 난수의 품질입니다. 약한 난수원에서 나온 UUID는 수학이 약속하는 방식의 고유성을 갖지 못합니다. 예측 가능한 생성기가 중복을 만들어 낸 실제 버그도 있었습니다. 이 도구는 Math.random()이 아니라 브라우저의 암호용 생성기를 사용합니다.
UUID는 비밀이 아닙니다
양쪽 방향으로 오해되는 부분이라 분명히 밝혀 둘 필요가 있습니다.
v4 UUID는 예측할 수 없으므로 추측할 수 없는 URL, 즉 공유 링크나 비밀번호 재설정 토큰으로 쓰는 것은 합리적입니다. 하지만 보안 기본 요소로 설계된 것이 아니며, 만료 기한도 없고, 로그에 기록되고 캐시되고 분석 도구에 들어가고 채팅에 붙여 넣어지는 일이 흔합니다. 우연히 추측하기 어려운 식별자로 다루시고, 자격 증명으로 여기지 마십시오.
그 반대도 마찬가지입니다. UUID가 무언가를 감춰 준다고 가정하지 마십시오. v1 UUID에는 타임스탬프와 MAC 주소가 그대로 드러나 있습니다. 어딘가에서 물려받은 ID가 버전 1로 시작한다면, 그것을 읽는 누구에게나 언제 어디에서 만들어졌는지 알려 주고 있는 셈입니다.
어디에 쓰게 되는가
- 데이터베이스 기본 키 — 특히 여러 머신에서 동시에 행이 생성될 때
- 오프라인 우선 앱 — 휴대폰이 연결 없이 레코드를 만들고 나중에 번호를 다시 매기지 않고 동기화할 수 있습니다
- API 요청 ID — 로그에서 하나의 요청을 여러 서비스에 걸쳐 추적합니다
- 파일 및 업로드 이름 — 사용자의 파일 이름을 신뢰하지 않고도 충돌을 피합니다
- 메시지 중복 제거 — 재시도된 요청이 두 번 처리되지 않도록 하는 멱등성 키
- 공유 링크 — 문서나 초대장을 위한, 추측할 수 없는 URL
- 테스트 데이터 — 실제 데이터와 절대 충돌하지 않는 고유한 값
사용 방법
- 필요한 개수를 선택합니다
- 생성합니다 — 새 UUID가 나타납니다
- 복사합니다 — UUID 하나만 복사하거나 목록 전체를 복사합니다
알아 두면 좋은 점
- 대소문자는 상관없지만, 소문자가 관례이며 이 도구도 소문자로 만듭니다. 일부 시스템은 UUID를 단순 문자열로 비교하므로 그곳에서는 A와 a가 다릅니다. 표기를 일관되게 유지하십시오.
- 하이픈은 표기 형식일 뿐입니다. 많은 시스템은 32자리를 하이픈 없이, 또는 16바이트 원시 데이터로 저장합니다. 같은 값이고 표현 방식만 다릅니다.
- 데이터베이스 키로는 비용이 따릅니다. UUID는 정수의 4바이트나 8바이트에 비해 16바이트이고, 무작위 값은 쓰기를 끝에 덧붙이는 대신 B-트리 인덱스 전반에 흩뿌립니다. 크고 쓰기가 많은 테이블에서는 측정 가능한 차이가 나며, 바로 이것이 v7이 해결하려 한 문제입니다.
- 비밀번호로 사용하지 마십시오. 예측할 수는 없지만 어디까지나 식별자이며, 로그와 브라우저 기록에 남습니다.
- "GUID"는 같은 것을 가리키는 Microsoft의 이름입니다. .NET과 SQL Server에서는 GUID라고 표기하지만, 동일한 128비트 값입니다.
- nil UUID는 전부 0입니다 — 00000000-0000-0000-0000-000000000000. 보통 "없음" 또는 "설정되지 않음"을 뜻하므로 알아볼 수 있으면 유용합니다.
자주 묻는 질문
UUID란 무엇이며 어디에 쓰나요?
UUID는 36자로 표기되는 128비트 식별자로, 예를 들면 f47ac10b-58cc-4372-a567-0e02b2c3d479와 같습니다. 그 목적은 중앙 카운터에 문의하지 않고도 무엇이든 스스로 고유한 ID를 만들 수 있게 하는 것입니다. 이는 여러 서버에서 동시에 레코드가 생성될 때, 오프라인 상태의 휴대폰에서 생성될 때, 또는 데이터베이스에 행이 존재하기도 전에 ID가 필요할 때 중요합니다.
UUID는 고유성이 보장되나요?
아니요. 하지만 충돌 확률은 무시해도 될 만큼 작습니다. 버전 4 UUID는 122비트의 무작위성을 가지며 약 5.3 × 10³⁶가지 경우의 수를 제공합니다. 단 하나의 중복이 생길 확률이 50%에 이르려면 약 270경 개를 생성해야 합니다. 초당 10억 개씩 만들어도 대략 85년이 걸립니다.
UUID와 GUID의 차이는 무엇인가요?
실무상 차이가 없습니다. GUID는 동일한 128비트 식별자를 가리키는 Microsoft의 이름이며 .NET과 SQL Server 곳곳에서 보실 수 있습니다. 한 가지 사소한 차이라면, 일부 Microsoft 도구가 {f47ac10b-...}처럼 GUID를 중괄호로 감싸 표시하고, 몇몇 오래된 API가 원시 이진 형식으로 변환할 때 일부 바이트의 순서를 다르게 배치한다는 점입니다.
어떤 UUID 버전을 써야 하나요?
일반적인 용도에는 버전 4를 쓰십시오. 완전히 무작위이며 어디에서 언제 만들어졌는지 전혀 드러내지 않습니다. 이 ID들이 데이터베이스 기본 키가 될 예정이라면 버전 7을 고려해 보십시오. 앞쪽에 타임스탬프를 두므로 값이 생성 시각순으로 정렬되고 인덱싱 효율이 훨씬 좋습니다. 공개되는 곳에는 버전 1을 피하십시오. MAC 주소와 타임스탬프가 들어 있기 때문입니다.
UUID를 보안 토큰으로 쓸 수 있나요?
추측할 수 없는 링크 용도로는 받아들일 만합니다. v4 UUID는 현실적으로 예측할 수 없기 때문입니다. 하지만 이는 자격 증명이 아니라 식별자입니다. 만료되지 않고, 그 자체만으로 취소할 수도 없으며, 서버 로그와 분석 도구, 브라우저 기록에 남기 쉽습니다. 실제 인증에는 만료 시간이 있는 전용 토큰을 사용하십시오.
이 UUID들은 서버에서 생성되나요?
아니요. 모든 최신 브라우저에 내장된 암호학적으로 안전한 생성기인 crypto.getRandomValues가 브라우저 안에서 만듭니다. 어떤 요청도 보내지 않고 아무것도 기록하지 않으므로 인터넷 연결을 끈 상태에서도 생성하실 수 있습니다.