날씨 정보를 불러오는 중...

UUID 생성기

UUID v4를 원하는 개수만큼 생성합니다. 브라우저의 암호학적 난수 생성기를 사용합니다.

UUID란?

Universally Unique Identifier, 128비트짜리 식별자입니다. 중앙 서버에 물어보지 않고도 각자 만들어도 겹치지 않는다는 것이 핵심입니다. 그래서 분산 시스템에서 ID를 만들 때 널리 쓰입니다.

550e8400-e29b-41d4-a716-446655440000처럼 8-4-4-4-12 형태의 16진수 36글자로 표기합니다.

v4는 무슨 뜻인가요?

UUID에는 여러 버전이 있고, v4는 전부 난수로 생성하는 방식입니다. 가장 널리 쓰입니다.

  • v1 — 시간 + MAC 주소 기반. 순서가 있지만 MAC 주소가 노출됩니다.
  • v4 — 완전 난수. 122비트가 무작위입니다.
  • v7 — 최근 표준. 앞부분이 타임스탬프라 시간순 정렬이 되면서 무작위성도 유지합니다.

세 번째 그룹의 첫 글자가 4인 것이 v4의 표식이고, 네 번째 그룹의 첫 글자는 8, 9, a, b 중 하나입니다. 생성된 값을 보면 이 규칙이 지켜진 것을 확인할 수 있습니다.

정말 안 겹치나요?

수학적으로 완전히 불가능하지는 않지만 현실적으로 무시할 수준입니다. 초당 10억 개씩 85년을 만들어야 충돌 확률이 50%에 도달합니다. 실무에서는 중복을 걱정하지 않아도 됩니다.

단, 암호학적으로 안전한 난수로 만들어야 합니다. 이 도구는 브라우저의 crypto API를 사용합니다. 예전 코드 중 Math.random()으로 UUID를 만드는 것은 예측 가능해서 보안 토큰 용도로는 부적합합니다.

DB 기본키로 써도 될까요?

장점은 분산 생성이 가능하고 ID로 레코드 수를 추측당하지 않는다는 것입니다. 단점은 정렬 순서가 무작위라 인덱스 성능이 떨어진다는 점입니다(특히 MySQL InnoDB의 클러스터형 인덱스). 데이터가 많아질수록 삽입 성능 저하가 두드러집니다.

그래서 요즘은 시간순으로 증가하는 UUID v7이나 ULID를 쓰는 쪽으로 옮겨가고 있습니다.

각 환경에서 생성하기
# 리눅스
uuidgen

# Python
python3 -c "import uuid; print(uuid.uuid4())"

# JavaScript (브라우저·Node 19+)
crypto.randomUUID()

# PostgreSQL
SELECT gen_random_uuid();

← 도구 전체 보기