UUID v4 식별자는 무엇을 의미하는가
UUID v4는 중앙 조율 기관 없이 분산 시스템 환경에서 개별 노드가 독립적으로 고유한 식별자를 만들 수 있도록 고안된 128비트 규격이다. 16진수 32자리와 4개의 하이픈으로 이루어진 문자열 형태로 표현된다. UUID / GUID 생성기 같은 도구를 사용하면 브라우저 내에서 대기 시간 없이 즉시 UUID 대량 생성과 같은 일괄 연산이 가능하다.
UUID v4 내부 비트 구조와 생성 공식
128비트 전체가 무작위로 채워지는 것은 아니다. RFC 4122 표준 사양에 따라 특수 목적을 위한 버전 비트와 배리언트 비트가 정해진 자리를 차지한다.
- 전체 길이: 128비트 (16바이트)
- 버전 비트: 13번째 바이트의 상위 4비트는 v4를 나타내는
0100으로 고정된다. - 배리언트 비트: 17번째 바이트의 상위 2비트는 RFC 표준 형식을 뜻하는
10으로 고정된다. - 순수 무작위 비트: 나머지 122비트는 암호학적으로 안전한 난수 생성기를 통해 채워진다.
실제 충돌 확률 계산과 수학적 근거
순수 무작위로 채워지는 122비트의 조합 수는 2의 122제곱이다. 이는 약 5.3 × 10의 36제곱에 달하는 엄청난 숫자이다.
생일 패러독스 확률 이론에 따르면, 충돌 확률이 50%에 도달하려면 매초 10억 개의 식별자를 85년 동안 끊김 없이 생성해야 한다. 따라서 일반적인 웹 서비스나 엔터프라이즈 시스템 환경에서 우연히 같은 값이 나올 확률은 사실상 제로에 가깝다.
생성된 식별자의 결과 해석과 활용 기준
생성된 문자열은 표준 형식을 만족하는지만 확인하면 된다. 별도의 중앙 서버가 중복 여부를 대조할 필요가 없으므로 마이크로서비스나 분산 데이터베이스에서 지연 시간 없는 키 발급이 가능하다.
다만 무작위 성격 때문에 데이터베이스 인덱스의 물리적 정렬 순서가 무작위로 흩어질 수 있다. 쓰기 성능이 극도로 중요한 대규모 테이블이라면 순차 정렬이 가능한 다른 버전을 고려하는 것이 좋다.
시스템 설계 시 자주 헷갈리는 부분
난수 기반 식별자를 다룰 때 흔히 범하는 오해는 '시간이 지나면 언젠가는 중복된다'는 생각이다. 하지만 사용 가능한 경우의 수 자체가 지구상의 모래알보다 훨씬 많기 때문에 알고리즘의 결함이 없는 한 중복은 일어나지 않는다.
[!TIP] 브라우저 기반 UUID / GUID 생성기는 서버로 데이터를 전송하지 않고 클라이언트 환경에서 즉시 연산하므로 보안성과 속도가 모두 높다.