DB 테이블에 새 레코드를 넣을 때 auto increment 대신 UUID를 쓰는 프로젝트가 점점 많아지고 있다. 분산 시스템에서 각 서버가 독립적으로 ID를 만들어도 충돌할 확률이 사실상 0에 가까운 게 UUID의 핵심 장점이다.
UUID의 구조
UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 표준 형식으로 표기하면 32개의 16진수 문자를 하이픈으로 구분한 모양이 된다.
550e8400-e29b-41d4-a716-446655440000
총 5개 구간(8-4-4-4-12)으로 나뉘며, 세 번째 구간 첫 자리가 버전을 나타낸다. 위 예시에서 "4"는 UUID v4(랜덤 기반)라는 뜻이다.
UUID 버전별 차이
| 버전 | 생성 방식 | 특징 |
|---|---|---|
| v1 | 타임스탬프 + MAC 주소 | 시간 순서 보장, MAC 노출 위험 |
| v4 | 랜덤 난수 | 가장 많이 사용, 충돌 확률 극히 낮음 |
| v5 | 네임스페이스 + 이름 해시(SHA-1) | 같은 입력이면 같은 UUID 생성 |
| v7 | 타임스탬프 + 랜덤 | 시간 순서 + 고유성 동시 확보 (최신) |
실무에서 가장 많이 쓰이는 건 v4다. 완전 랜덤이라 생성 시점이나 장비 정보가 노출되지 않는다.
충돌 확률은 얼마나 되나
UUID v4의 랜덤 비트는 122비트다. 가능한 조합은 약 5.3 × 10의 36제곱. 매초 10억 개씩 100년 동안 생성해도 충돌 확률은 50%에 한참 못 미친다. 실질적으로 중복이 발생할 가능성은 무시해도 되는 수준이다.
어떤 형식으로 쓸까
- 기본 형식 —
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx(가장 표준적) - 하이픈 제거 — 32자리 연속 문자열. URL이나 파일명에 쓸 때 편하다
- 중괄호 형식 — Windows GUID 표기에서 사용
- URN 형식 —
urn:uuid:접두어 포함. XML 문서 등에서 사용
UUID 생성기에서 형식을 선택하고 생성 버튼을 누르면 바로 결과가 나온다. 대량 생성(최대 1,000개)도 지원하고, 텍스트 파일로 다운로드할 수 있어서 테스트 데이터 준비에 유용하다.
ID 체계를 처음 설계할 때 UUID를 선택하면 나중에 시스템을 확장하거나 병합할 때 충돌 걱정 없이 합칠 수 있다.