UUID v4

-

UUID 버전별 차이, DB 성능 영향, ULID 비교를 더 깊이 알고 싶다면 UUID v1 vs v4 vs v7 비교 가이드를 참고하세요.

UUID란?

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자로, RFC 4122에 의해 표준화되었습니다. 일반적으로 8-4-4-4-12 형식의 16진수 문자열(예: 550e8400-e29b-41d4-a716-446655440000)로 표현되며, 하이픈을 제거하면 32자입니다. 데이터베이스 기본 키, API 요청 식별, 세션 관리, 파일명 생성 등 소프트웨어 개발 전반에서 사용됩니다.

이 도구는 UUID 버전 4(v4)를 생성합니다. v4는 122비트의 난수(random)로 생성되며, 나머지 6비트는 버전 정보(4)'와 RFC 변형 비트로 고정됩니다. 이론적으로 동일한 UUID가 생성될 확률은 극히 낮아(2^122 조합), 실무에서 충돌 걸정 없이 사용할 수 있습니다.

모든 생성은 브라우저의 Math.random()을 사용하여 클라이언트 측에서 수행되며, 서버로 데이터가 전송되지 않습니다.

UUID 버전 비교

UUID는 여러 버전이 존재하며, 각각 다른 생성 방식과 특성을 가집니다.

UUID v1은 타임스탬프와 MAC 주소를 기반으로 생성됩니다. 시간 순서가 보장되지만, MAC 주소가 노출되어 프라이버시 우려가 있습니다.

UUID v4는 완전한 난수 기반입니다. 생성이 간단하고 개인정보를 포함하지 않아 가장 널리 사용됩니다. 단, 시간 순서가 없어 데이터베이스 인덱스 성능에 영향을 줄 수 있습니다.

UUID v7은 2024년 RFC 9562로 표준화된 최신 버전입니다. 상위 48비트에 Unix 타임스탬프(밀리초)를 포함하여 시간 순으로 정렬되며, B-tree 인덱스 성능이 우수합니다. 새로운 프로젝트에서는 v7 채택을 검토할 가치가 있습니다.

실무 활용 사례

분산 시스템 기본 키(PK) — 여러 서비스에서 동시에 레코드를 생성할 때, 중앙 서버 없이 충돌 없는 ID를 확보할 수 있습니다. Auto-increment ID와 달리 노드 간 조율이 필요 없습니다.

세션 및 추적 키 — 비로그인 사용자의 장바구니, 임시 세션, 파일 업로드 식별자를 빠르게 발급할 수 있습니다.

테스트 데이터 생성 — QA 환경에서 더미 레코드에 일관된 고유 키를 부여하여 테스트 데이터 충돌을 방지합니다.

API 멱등 키(Idempotency Key) — 결제 API 등 중복 요청을 방지해야 하는 경우, 요청별 고유 UUID를 헤더에 포함하여 멱등성을 보장합니다.

저장 및 사용 시 주의사항

대소문자 통일 — UUID는 대소문자를 구분하지 않지만(RFC 4122), 데이터베이스나 API에서 문자열 비교 시 불일치가 발생할 수 있습니다. 프로젝트 전체에서 소문자 또는 대문자로 통일하세요.

하이픈 포함/제거 통일 — 하이픈 포함 시 36자, 제거 시 32자입니다. 길이 검증 로직이 다를 수 있으므로, 시스템 전체에서 하나의 형식을 선택해 일관적으로 적용하세요.

보안 토큰으로 사용 금지 — UUID는 식별자이지 비밀 키가 아닙니다. 인증 토큰, 세션 시크릿 등 보안이 필요한 값에는 crypto.getRandomValues()나 전용 토큰 라이브러리를 사용하세요.

데이터베이스 성능 — UUID v4는 난수 기반이므로 B-tree 인덱스에서 페이지 분할(page split)이 빈번하게 발생할 수 있습니다. 대량 INSERT가 필요한 환경에서는 UUID v7이나 ULID처럼 시간 순서가 있는 포맷을 검토하세요.

결과 해석 가이드

UUID v4의 구조는 xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx입니다. 여기서 4는 UUID 버전을, y 위치의 첫 글자(8, 9, a, b 중 하나)는 RFC 4122 변형 비트를 나타냅니다. 이 두 위치를 확인하면 생성된 UUID가 유효한 v4 형식인지 검증할 수 있습니다.

자주 묻는 질문

UUID v4는 어떻게 생성되나요?

128비트 중 122비트를 난수로 채우고, 4비트는 버전 정보(0100), 2비트는 RFC 변형 정보(10)로 고정합니다. 이 도구는 브라우저의 Math.random()을 사용하여 생성하며, 서버 통신 없이 즉시 결과를 얻을 수 있습니다.

UUID를 데이터베이스 기본 키로 사용해도 되나요?

가능합니다. 분산 시스템에서 충돌 없는 ID를 확보하는 데 유용합니다. 다만 v4는 난수 기반이라 인덱스 성능에 영향을 줄 수 있으므로, 정렬 순서가 필요한 경우 UUID v7이나 ULID를 검토하세요. MySQL에서는 BINARY(16) 타입으로 저장하면 공간을 절약할 수 있습니다.

UUID를 보안 토큰으로 사용할 수 있나요?

권장하지 않습니다. UUID는 예측 불가능성이 보장되지 않으며, 특히 Math.random() 기반 구현은 암호학적으로 안전하지 않습니다. 보안 토큰에는 crypto.getRandomValues()나 서버 측 토큰 생성 라이브러리를 사용하세요.

생성 개수를 100개 이상으로 늘릴 수 있나요?

현재 페이지에서는 성능과 가독성을 위해 한 번에 최대 100개로 제한합니다. 더 많은 수가 필요하면 여러 번 생성한 후 전체 복사 버튼을 활용하세요. 대량 생성이 정기적으로 필요한 경우 커맨드라인 도구(uuidgen)나 프로그래밍 라이브러리를 권장합니다.

UUID를 숫자로만 저장해도 되나요?

권장하지 않습니다. UUID는 16진수 문자열이므로, 하이픈을 제거한 32자 hex 문자열 또는 BINARY(16)으로 저장하는 것이 일반적입니다. 정수로 변환하면 128비트 정수가 필요하여 대부분의 언어에서 네이티브 지원이 없습니다.

생성된 UUID가 서버로 전송되나요?

아니요. 모든 생성과 복사는 브라우저 내부에서만 처리됩니다. 네트워크 요청이 발생하지 않으며, 개발자 도구의 Network 탭에서 직접 확인할 수 있습니다.

UUID와 ULID의 차이점은 무엇인가요?

ULID(Universally Unique Lexicographically Sortable Identifier)는 상위 48비트에 밀리초 타임스탬프를 포함하여 사전식 정렬이 가능합니다. UUID v7과 유사한 개념이지만, Crockford Base32 인코딩을 사용하여 26자로 표현됩니다. 데이터베이스 인덱스 성능이 중요한 환경에서 UUID v4의 대안으로 검토됩니다.

광고 영역