유틸리티

UUID란? v4 생성 방법과 실무 활용법 정리

데이터베이스 테이블을 설계할 때 기본 키(primary key)로 1, 2, 3... 같은 자동 증가 ID를 쓰는 게 일반적이다. 하지만 서버가 여러 대이거나 데이터를 병합해야 하는 환경에서는 ID 충돌이 발생할 수 있다. 이런 상황에서 UUID를 쓰면 전 세계적으로 고유한 식별자를 만들 수 있다.

UUID의 구조

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 16진수 32자리를 하이픈으로 구분해서 표기한다.

형식 550e8400-e29b-41d4-a716-446655440000
8자리-4자리-4자리-4자리-12자리, 총 36자(하이픈 포함)

v4 UUID에서 세 번째 그룹의 첫 자리는 항상 4다. 이것으로 버전을 구분한다. 네 번째 그룹의 첫 자리는 8, 9, a, b 중 하나(변형 표시)다.

UUID v4가 충돌할 확률

v4 UUID는 122비트의 무작위 값을 사용한다. 가능한 조합 수는 약 5.3 × 10³⁶개다.

  • 초당 10억 개씩 생성해도 충돌이 일어나려면 수십억 년이 걸린다
  • 현실적으로 충돌 확률은 무시해도 되는 수준이다
  • 다만 난수 생성기의 품질이 중요하다. 암호학적 난수(CSPRNG)를 쓰지 않으면 패턴이 생길 수 있다

출력 형식 4가지

형식예시사용처
기본 (하이픈)550e8400-e29b-41d4-a716-446655440000일반적인 DB, API
하이픈 제거550e8400e29b41d4a716446655440000URL, 파일명
중괄호{550e8400-e29b-...}Windows GUID, COM
URNurn:uuid:550e8400-...XML, 표준 문서

UUID 생성하는 법

개발 중에 빠르게 UUID 하나가 필요하면 UUID 생성기에서 바로 뽑을 수 있다. 형식 선택, 대문자 옵션, 대량 생성(최대 1,000개)까지 지원한다. 테스트 데이터를 만들 때 1,000개를 한꺼번에 생성해서 텍스트 파일로 다운로드하면 편하다.

프로그래밍 언어별로도 생성할 수 있다.

  • Python: import uuid; uuid.uuid4()
  • JavaScript: crypto.randomUUID()
  • Java: UUID.randomUUID()

UUID vs 자동 증가 ID

UUID의 장점
서버 간 ID 충돌 없음. 분산 시스템, 마이크로서비스에 적합. ID에서 생성 순서나 데이터 규모를 추측할 수 없어서 보안에도 유리하다.
UUID의 단점
36자로 길어서 저장 공간을 더 차지한다. 정렬이 무작위라서 인덱스 성능이 떨어질 수 있다. 사람이 읽거나 외우기 어렵다.

어떤 ID 체계를 쓸지는 프로젝트 구조에 따라 다르다. 분산 환경이라면 UUID, 단일 서버에 순서가 중요하면 자동 증가 ID가 맞다.