테이블에 데이터를 넣을 때 auto increment로 1, 2, 3 번호를 매기면 간단하다. 그런데 서버가 여러 대이거나, 마이크로서비스끼리 데이터를 주고받는 상황이라면? 번호가 겹치는 순간 시스템이 꼬인다. 이런 문제를 해결하려고 만들어진 게 UUID다.
UUID가 뭔가
UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 보통 550e8400-e29b-41d4-a716-446655440000 형태로, 하이픈으로 구분된 32개 16진수 문자로 표시된다. 중앙 서버 없이도 누가, 어디서, 언제 생성하든 겹칠 확률이 사실상 0에 가깝다.
UUID 버전별 차이
| 버전 | 생성 기준 | 특징 |
|---|---|---|
| v1 | 타임스탬프 + MAC 주소 | 생성 시간 추적 가능, MAC 주소 노출 위험 |
| v3 | 이름 기반 (MD5) | 같은 입력이면 같은 UUID 생성 |
| v4 | 완전 랜덤 | 가장 많이 쓰임, 충돌 확률 극히 낮음 |
| v5 | 이름 기반 (SHA-1) | v3의 보안 강화 버전 |
실무에서 90% 이상은 v4를 쓴다. 별도 입력값 없이 랜덤으로 생성되니까 가장 간편하고, 개인정보(MAC 주소 등)가 포함되지 않아 보안 면에서도 낫다.
충돌 확률이 얼마나 낮은가
UUID v4의 랜덤 비트는 122비트다. 가능한 조합은 약 5.3 x 1036개. 매초 10억 개씩 생성해도 100년간 충돌이 일어날 확률이 50%에 도달하려면 약 86년이 걸린다. 사실상 걱정할 필요가 없는 수준이다.
참고 UUID와 GUID는 같은 것이다. UUID는 RFC 4122 표준 명칭이고, GUID(Globally Unique Identifier)는 마이크로소프트가 붙인 이름이다.
실무에서 UUID를 쓰는 곳
- 데이터베이스 PK: 분산 환경에서 ID 충돌 없이 레코드 생성
- API 리소스 식별:
/users/550e8400-e29b-...형태로 예측 불가능한 URL 구성 - 파일명 지정: 업로드 파일에 UUID를 붙이면 이름 충돌 방지
- 세션/토큰: 임시 식별자가 필요한 모든 곳
UUID 빠르게 만들기
개발 중이라면 코드에서 라이브러리로 생성하겠지만, 테스트용으로 몇 개 뽑아야 할 때는 UUID 생성기가 빠르다. 한 번에 최대 1,000개까지 대량 생성이 되고, 하이픈 제거 형식이나 중괄호({}) 형식으로도 출력할 수 있다. 결과를 텍스트 파일로 다운로드하는 기능도 있어서, 테스트 데이터 세팅할 때 복사-붙여넣기 반복할 필요가 없다.
UUID는 한 번 이해하면 어렵지 않다. "중앙 관리 없이도 겹치지 않는 ID", 그게 전부다.