한국은 오랫동안 웹사이트 회원가입 시 주민등록번호(RRN) 입력을 요구하는 실명확인제를 운영했지만, 대규모 개인정보 유출 사고가 이어지면서 2012년 헌법재판소가 관련 조항에 위헌 결정을 내렸다. 이후 주민등록번호 대신 아이핀(i-PIN)이나 휴대폰 인증 같은 대체 수단이 자리 잡았고, 서비스 내부적으로 사용자를 식별할 때도 주민등록번호 자체가 아니라 UUID 같은, 개인정보를 전혀 담지 않는 무작위 식별자를 쓰는 방식이 표준이 되었다.
UUID 버전
- v1 — 현재 시간과 네트워크 카드의 MAC 주소를 기반으로 합니다. 고유성을 보장하지만 식별자가 언제, 어떤 기기에서 생성됐는지 부분적으로 드러냅니다.
- v4 — 버전을 표시하는 몇 비트를 제외하면 완전히 무작위입니다. 부수 정보를 전혀 노출하지 않는다는 바로 그 이유로 오늘날 가장 흔히 쓰이는 방식입니다.
- v5 — 결정적이며, 네임스페이스와 문자열의 해시로 계산됩니다 — 같은 입력은 항상 같은 UUID를 만들어냅니다.
충돌 확률이 사실상 0인 이유
UUID v4에서는 122비트가 무작위입니다. 수백 년 동안 초당 수십억 개의 UUID를 생성하더라도, 충돌이 한 번이라도 일어날 확률은 천문학적으로 작게 유지됩니다 — 이는 이만한 크기의 공간에 대한 생일 역설에 수학적으로 근거한 사실입니다.
왜 필요한가
- 중앙 카운터나 서버 간 조정 없이 데이터베이스 기본 키 생성하기.
- 주민등록번호 같은 실제 개인정보를 노출하지 않으면서 세션이나 트랜잭션 식별자 만들기.
- (
1, 2, 3...과 달리) 쉽게 나열할 수 있는 예측 가능한 순차 ID 피하기.
UUID v7: 무작위성과 정렬 가능성의 절충
완전히 무작위인 UUID v4는 데이터베이스 인덱스 성능에 나쁜 영향을 줍니다 — 새 레코드가 인덱스 트리의 끝이 아니라 무작위 위치에 삽입되기 때문입니다. 더 새로운 UUID v7은 식별자의 앞쪽 비트에 타임스탬프를 넣어 이 문제를 해결합니다. 값은 v4처럼 사실상 고유하게 유지되면서도, 순차 카운터처럼 생성 시간 순서로 자연스럽게 정렬됩니다.