유틸리티

UUID란, v4 생성 방법부터 GUID와의 차이까지 정리

데이터베이스 테이블의 기본 키(PK)를 1, 2, 3... 자동 증가로 쓰다 보면 문제가 생긴다. 서버를 여러 대 운영하면 번호가 충돌하고, 외부에 노출되면 전체 데이터 규모가 추측된다. UUID는 이런 문제를 해결하기 위해 만들어진 128비트 길이의 고유 식별자다.

UUID가 뭔가

UUID(Universally Unique Identifier)는 중앙 관리 없이도 전 세계적으로 유일한 ID를 만들 수 있는 표준이다. 550e8400-e29b-41d4-a716-446655440000처럼 32자리 16진수를 하이픈으로 구분한 형태로 표현된다.

핵심 UUID v4의 경우 무작위로 생성되는 조합의 수가 약 5.3 x 10^36개다. 초당 10억 개씩 생성해도 중복이 발생할 확률이 사실상 0에 가깝다.

UUID 버전별 차이

버전생성 방식특징
v1타임스탬프 + MAC 주소생성 시각 추적 가능, MAC 주소 노출 위험
v3이름 + MD5 해시같은 입력이면 같은 UUID 생성
v4완전 랜덤가장 널리 사용, 충돌 확률 극히 낮음
v5이름 + SHA-1 해시v3와 유사하나 해시 알고리즘이 더 강함

실무에서 가장 많이 쓰이는 건 v4다. 완전한 난수 기반이라 외부에서 생성 패턴을 추측할 수 없고, 별도의 중앙 서버 없이 어디서든 독립적으로 생성할 수 있다.

UUID와 GUID, 뭐가 다른가

GUID(Globally Unique Identifier)는 마이크로소프트가 쓰는 용어이고, UUID와 사실상 같은 것이다. 포맷도 동일하다. Windows, .NET에서는 GUID라고 부르고, 그 외 환경에서는 UUID라고 부른다.

UUID 생성하기

개발 중에 테스트용 UUID가 여러 개 필요할 때마다 코드를 짜는 건 번거롭다. UUID 생성기에서 버튼 한 번이면 v4 UUID가 바로 나온다. 대량 생성도 가능해서 100개, 1000개 단위로 뽑아 텍스트 파일로 다운로드할 수 있다.

출력 형식 옵션

  • 기본 : 550e8400-e29b-41d4-a716-446655440000 (하이픈 포함)
  • 하이픈 제거 : 550e8400e29b41d4a716446655440000
  • 중괄호 : {550e8400-e29b-41d4-a716-446655440000} (GUID 형식)
  • URN : urn:uuid:550e8400-e29b-41d4-a716-446655440000

UUID를 쓸 때 고려할 점

  1. 저장 공간 : 16바이트(128비트)로 정수형 ID(4~8바이트)보다 크다. 대규모 데이터에서는 인덱스 성능에 영향을 줄 수 있다
  2. 정렬 순서 : v4 UUID는 랜덤이라 시간순 정렬이 안 된다. 시간순이 필요하면 ULID나 v7(타임스탬프 기반)을 고려하자
  3. 가독성 : 디버깅할 때 1, 2, 3보다 읽기 어렵다. 로그에서 특정 레코드를 찾으려면 복사 붙여넣기가 필수다

마이크로서비스, 분산 시스템에서는 UUID가 사실상 표준이다. 테스트 단계에서 여러 개 빠르게 뽑아야 할 때, 생성기를 북마크해두면 시간을 아낄 수 있다.