데이터베이스에 레코드를 추가할 때 ID를 1, 2, 3으로 올리는 방식은 간단하지만, 여러 서버에서 동시에 데이터를 쓰면 번호가 충돌한다. UUID는 이 문제를 해결하기 위해 만들어진 128비트 고유 식별자다.
UUID의 구조
UUID는 32자리 16진수를 하이픈으로 구분한 형태다.
550e8400-e29b-41d4-a716-446655440000
8-4-4-4-12 패턴으로 나뉘며, 총 36자(하이픈 포함)다. 가능한 조합의 수는 약 3.4 x 10^38으로, 지구상 모든 사람이 매초 하나씩 만들어도 수십억 년 동안 충돌이 발생하지 않는 수준이다.
UUID 버전별 차이
| 버전 | 생성 방식 | 특징 |
|---|---|---|
| v1 | 시간 + MAC 주소 | 생성 시각 추적 가능, MAC 주소 노출 우려 |
| v3 | 이름 기반 (MD5) | 같은 입력이면 같은 UUID 생성 |
| v4 | 완전 무작위 | 가장 널리 사용, 충돌 확률 극히 낮음 |
| v5 | 이름 기반 (SHA-1) | v3의 보안 강화 버전 |
| v7 | 시간순 정렬 가능 | 최신 표준, DB 인덱스 성능 우수 |
실무에서 가장 많이 쓰이는 건 v4다. 시간이나 하드웨어 정보에 의존하지 않고 순수 난수로 생성되므로 예측이 불가능하고, 어떤 환경에서든 동일하게 동작한다.
UUID가 쓰이는 곳
- 데이터베이스 기본키 — 분산 시스템에서 중복 없는 ID가 필요할 때
- 파일 이름 — 사용자 업로드 파일의 이름 충돌을 방지할 때
- 세션/토큰 — 사용자 인증 세션에 고유 식별자를 부여할 때
- API 요청 추적 — 로그에서 특정 요청을 추적하기 위한 correlation ID
UUID 생성 방법
코드에서 직접 생성할 수도 있지만, 테스트 데이터나 설정 파일에 넣을 UUID가 필요할 때는 UUID 생성기가 빠르다. 한 번에 최대 1,000개까지 대량 생성이 가능하고, 하이픈 제거, 중괄호 감싸기, URN 형식 등 네 가지 포맷을 지원한다. 생성 결과를 텍스트 파일로 다운로드하는 기능도 있어서 대량 더미 데이터를 만들 때 유용하다.
TIP UUID v4에서 세 번째 그룹의 첫 자리는 항상 4다. 네 번째 그룹의 첫 자리는 8, 9, a, b 중 하나다. 이 패턴으로 v4 여부를 바로 판별할 수 있다.
"고유해야 하는데 순서는 상관없다"면 UUID v4가 정답이다. 생성에 1초도 안 걸린다.