UUID 생성 도구

UUID(v1, v4, v5, v7) 생성 및 검증을 지원하며, 일괄 생성과 다양한 포맷 옵션을 제공하고 여러 언어의 코드 예제를 제공합니다.

UUID 생성기

포맷 옵션

UUID 검증기

사용 방법

UUID는 128비트 식별자로, 표준 형식은 하이픈으로 구분된 36자 문자열입니다.
UUID v1: 타임스탬프와 네트워크 카드 정보를 기반으로 생성되며, 시간 순서대로 정렬 가능하지만 시간/위치 정보 유출 가능성 있음.
UUID v4: 무작위 수를 기반으로 생성되며, 가장 일반적으로 사용되며 높은 고유성과 개인정보 보호성을 갖춤.
UUID v7: Unix 밀리초 타임스탬프 + 무작위 수를 기반으로 생성되며, 자연스럽게 정렬 가능하고 v1의 개인정보 유출 문제를 해결함.
UUID v5: 네임스페이스 UUID와 이름을 기반으로 SHA-1 해시를 통해 계산됨; 동일한 입력은 항상 동일한 결과를 생성함.
표준 형식: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36자)

기능 특징

  • UUID v1, v4, v5, v7 지원
  • 사용자 지정 개수의 일괄 생성 지원
  • 유연한 포맷팅: 대문자, 하이픈 제거, 중괄호 추가
  • 내장 검증기 및 버전 인식 기능
  • 완전한 다국어 및 멀티 테마 지원

UUID란?

UUID는 128비트 식별자로, 표준 형식은 하이픈으로 구분된 36자 문자열입니다.

UUID v1: 타임스탬프와 네트워크 카드 정보를 기반으로 생성되며, 시간 순서대로 정렬 가능하지만 시간/위치 정보 유출 가능성 있음.

UUID v4: 무작위 수를 기반으로 생성되며, 가장 일반적으로 사용되며 높은 고유성과 개인정보 보호성을 갖춤.

UUID v7: Unix 밀리초 타임스탬프 + 무작위 수를 기반으로 생성되며, 자연스럽게 정렬 가능하고 v1의 개인정보 유출 문제를 해결함.

UUID v5: 네임스페이스 UUID와 이름을 기반으로 SHA-1 해시를 통해 계산됨; 동일한 입력은 항상 동일한 결과를 생성함.

UUID 빠른 예시

표준 형식:
550e8400-e29b-41d4-a716-446655440000
대문자 형식:
550E8400-E29B-41D4-A716-446655440000
하이픈 없음:
550e8400e29b41d4a716446655440000
중괄호 포함:
{550e8400-e29b-41d4-a716-446655440000}

UUID 주요 사용 사례

  • 데이터베이스 레코드 또는 리소스의 고유 식별자
  • 로그 및 이벤트 추적용 Trace ID
  • 추측하기 어려운 공개 식별자
  • 시스템 간 인터페이스에서의 통일된 식별자

UUID 자주 묻는 질문 및 주의사항

  • v1과 개인정보: v1은 시간/위치 정보를 유출할 수 있으므로, 개인정보 보호가 중요하다면 v4를 권장합니다.
  • 대소문자 구분 여부: 매칭 시 대소문자를 구분하지 않음
  • 하이픈은 단지 표시용이며, 제약이 없다면 보존하는 것을 권장합니다.
  • 중괄호 형식은 일부 환경(예: Windows 레지스트리)에서 허용됨
  • v5는 결정적입니다(동일한 네임스페이스 + 이름 => 동일한 UUID). 멱등성 요구 시 적합하지만, 예측 불가능성이 필요한 경우에는 부적합합니다.

프로그래밍 언어에서 UUID 사용 방법

JavaScript
생성
// UUID v4 (simple)
function uuidv4(){
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
    const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
  });
}
const id = uuidv4();
UUID v7(Unix 시간 + 무작위)
// UUID v7 (Unix ms + randomness)
function uuidv7(){
  const cryptoObj = (globalThis.crypto || globalThis.msCrypto);
  const rb = n => { const a = new Uint8Array(n); cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(a) : a.forEach((_,i)=>a[i]=Math.random()*256|0); return a; };
  const hex = b => Array.from(b).map(x=>x.toString(16).padStart(2,'0')).join('');
  const ts = BigInt(Date.now()).toString(16).padStart(12,'0');
  const ver = rb(2); ver[0] = (ver[0] & 0x0f) | 0x70;    // set version 7
  const vrn = rb(2); vrn[0] = (vrn[0] & 0x3f) | 0x80;    // RFC4122 variant
  const tail = rb(6);
  return `${ts.slice(0,8)}-${ts.slice(8,12)}-${hex(ver)}-${hex(vrn)}-${hex(tail)}`;
}
const id7 = uuidv7();
검증
const re=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
re.test(id); // true/false
PHP
생성
<?php
// v4 using random_bytes
function uuidv4(){
  $data = random_bytes(16);
  $data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
  $data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
  return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$id = uuidv4();
UUID v7(Unix 시간 + 무작위)
<?php
// composer require ramsey/uuid:^4.7
use Ramsey\Uuid\Uuid;

$uuid7 = Uuid::uuid7();
검증
<?php
$re = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
preg_match($re, $id) === 1; // true/false
Python
생성
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
UUID v7(Unix 시간 + 무작위)
# pip install uuid6
from uuid6 import uuid7

uid7 = uuid7()
검증
import re
re_uuid = re.compile(r'^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', re.I)
bool(re_uuid.match(str(uid)))
Go
생성
// go get github.com/google/uuid
import "github.com/google/uuid"

id := uuid.New()     // v4
id1 := uuid.NewUUID() // v1 (may return error)
UUID v7(Unix 시간 + 무작위)
// go get github.com/gofrs/uuid/v5
import (
  uuid "github.com/gofrs/uuid/v5"
)

id7, err := uuid.NewV7()
검증
import "github.com/google/uuid"
_, err := uuid.Parse(id.String()) // err == nil means valid
Rust
생성
// Cargo.toml: uuid = { version = "1", features = ["v4", "v1"] }
use uuid::Uuid;

let v4 = Uuid::new_v4();
// v1 requires a context/ts, often via external crate; shown for completeness
UUID v7(Unix 시간 + 무작위)
// Cargo.toml: uuid = { version = "1", features = ["v7"] }
use uuid::Uuid;

let v7 = Uuid::now_v7();
검증
use uuid::Uuid;
let ok = Uuid::parse_str(v4.to_string().as_str()).is_ok();
Java
생성
import java.util.UUID;

UUID id = UUID.randomUUID(); // v4
UUID v7(Unix 시간 + 무작위)
// Maven: com.github.f4b6a3:uuid-creator
import com.github.f4b6a3.uuid.UuidCreator;

UUID v7 = UuidCreator.getTimeOrderedEpoch(); // UUIDv7
검증
import java.util.UUID;

try { UUID.fromString(id.toString()); /* valid */ } catch (IllegalArgumentException ex) { /* invalid */ }