데이터베이스에 새 레코드를 추가하려는데, 고유 ID를 뭘로 잡을지 고민이다. 숫자 자동증가(auto-increment)가 가장 간단하지만, 서버가 여러 대인 분산 환경에서는 같은 번호가 동시에 발급될 수 있다. 이 문제를 해결하는 표준 방식이 UUID다.
UUID가 뭔데
UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 550e8400-e29b-41d4-a716-446655440000처럼 하이픈으로 구분된 16진수 32자리로 표현된다. 중앙 서버 없이도 어디서든 생성할 수 있고, 다른 곳에서 생성한 것과 겹칠 확률이 사실상 0에 가깝다.
참고 Microsoft에서는 같은 개념을 GUID(Globally Unique Identifier)라고 부른다. UUID와 GUID는 형식이 같고, 용어만 다르다.
왜 v4가 가장 많이 쓰일까
UUID에는 여러 버전이 있지만, 실무에서는 v4가 압도적으로 많이 쓰인다.
| 버전 | 생성 기준 | 특징 |
|---|---|---|
| v1 | 타임스탬프 + MAC 주소 | 생성 시각 추적 가능, MAC 주소 노출 우려 |
| v3 | 이름 기반 (MD5) | 같은 이름이면 같은 UUID 생성 |
| v4 | 완전 랜덤 | 구현 간단, 개인정보 노출 없음 |
| v5 | 이름 기반 (SHA-1) | v3의 보안 강화 버전 |
v4는 122비트의 랜덤 값으로 만들어진다. 이론적으로 충돌하려면 약 2.71 × 1018개를 생성해야 50% 확률에 도달한다. 매초 10억 개씩 만들어도 86년이 걸리는 양이니, 실용적으로는 충돌이 일어나지 않는다고 봐도 된다.
UUID 포맷 종류
- 기본 형식:
550e8400-e29b-41d4-a716-446655440000(하이픈 포함 36자) - 하이픈 제거:
550e8400e29b41d4a716446655440000(32자, DB 저장 시 용량 절약) - 중괄호 형식:
{550e8400-e29b-41d4-a716-446655440000}(Windows 레지스트리 스타일) - URN 형식:
urn:uuid:550e8400-...(RFC 4122 표준 표기)
UUID 빠르게 뽑는 법
코드 한 줄로도 생성할 수 있지만, 테스트 데이터용으로 100개, 1,000개씩 뽑아야 할 때는 UUID 생성기가 빠르다. 개수와 포맷(하이픈 포함, 중괄호, URN 등)을 선택하면 한 번에 최대 1,000개까지 생성되고, 결과를 텍스트 파일로 다운로드할 수 있어서 SQL INSERT 문에 바로 붙여넣기 좋다.
고유 ID 체계를 뭘로 할지 정할 때, 단일 서버라면 auto-increment로 충분하고, 분산 환경이거나 외부 노출이 필요하면 UUID v4가 안전한 선택이다.