UUID란 무엇인가?
UUID(범용 고유 식별자) 전역적으로 고유하도록 설계된 표준화된 식별자 형식입니다. UUID는 일반적으로 32개의 16진수 숫자로 표현되며, 하이픈으로 구분된 다섯 그룹으로 표시됩니다: 123e4567-e89b-12d3-a456-426614174000
.
UUID는 RFC 9562 표준에 정의되어 있으며(이전 RFC 4122를 대체), 중앙 등록이나 조정 없이 정보를 식별하기 위해 컴퓨팅 플랫폼 전반에서 사용됩니다.
UUID 형식
모든 UUID는 36자(32개의 16진수 숫자와 4개의 하이픈)로 구성된 공통 형식을 공유하며, 다음 패턴으로 배열됩니다:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
여기서:
x
임의의 16진수 숫자(0-9, a-f)M
UUID 버전(1-7)을 나타냄N
UUID 변형을 나타냄(일반적으로 현대 UUID의 경우 8, 9, A 또는 B)
UUID 버전 비교
Version | Name | 생성 방법 | Time-ordered | 사용 사례 |
---|---|---|---|---|
UUID v1 | Timestamp | 현재 타임스탬프 + 노드 ID(MAC) | 예(부분적) | 로깅, 분산 시스템 |
UUID v3 | 이름 기반(MD5) | 네임스페이스 + 이름의 MD5 해시 | No | 동일 입력에 대해 일관된 ID |
UUID v4 | Random | 무작위 또는 의사 무작위 숫자 | No | 일반 목적, 가장 흔함 |
UUID v5 | 이름 기반(SHA-1) | 네임스페이스 + 이름의 SHA-1 해시 | No | 더 강력한 해시로 일관된 ID |
UUID v6 | 재정렬된 타임스탬프 | 정렬을 위한 타임스탬프 | Yes | 데이터베이스 키, 시간 정렬 가능한 레코드 |
UUID v7 | 유닉스 에포크 타임스탬프 | 유닉스 타임스탬프 + 무작위 데이터 | Yes | 현대식 정렬 가능한 식별자 |
Nil UUID | 제로 UUID | 모두 0 | N/A | 특수 값, 초기화되지 않은 표시자 |
UUID의 장점
- 조정 불필요: 중앙 조정 없이 ID 생성
- 전역 고유성: 충돌 확률이 극히 낮음
- 고정 길이: 일관된 36자 문자열 표현
- Cross-Platform: 거의 모든 프로그래밍 언어에서 지원
- Versatile: 다양한 사용 사례에 맞는 여러 버전
비표준 UUID 대안
ID 유형 | Description | Advantages | Disadvantages |
---|---|---|---|
GUID | 마이크로소프트의 UUID 구현 | UUID와 기능적으로 동일 | 구형 시스템에서 일부 구현 차이 |
ULID | 범용 고유 사전식 정렬 식별자 | 사전식 정렬 가능, 타임스탬프 우선, 대소문자 구분 없음 | 신규, 덜 널리 채택됨 |
스노우플레이크 ID | 트위터의 분산 ID 시스템 | 시간 정렬 가능, 컴팩트(64비트) | 중앙 조정 필요 |
CUID/CUID2 | 충돌 저항 ID | 짧고 클라이언트 측 생성에 적합 | 공식 표준 아님 |
Nano ID | 작고 안전하며 URL 친화적인 고유 문자열 ID 생성기 | UUID보다 작고, 알파벳 구성 가능 | 표준화되지 않음 |
짧은 UUID | 표준 UUID의 더 짧은 인코딩 | 더 컴팩트한 표현 | 표준 UUID와 변환 필요 |
Nil UUID | 모든 비트가 0으로 설정된 UUID | 특수 의미 부여 | 고유하지 않음(특수 값으로 사용) |
Minecraft UUID | 하이픈 포함 또는 미포함 UUID | 표준 UUID와 호환 가능 | 형식 차이만 있음 |
실용적 응용
- 데이터베이스 기본 키: 특히 분산 또는 복제된 데이터베이스에서
- 분산 시스템: 여러 시스템 간 엔티티 식별
- 웹 애플리케이션: 세션 식별자, 익명 사용자 추적
- 콘텐츠 관리: 문서 및 미디어 식별자
- APIs: 추적 및 디버깅을 위한 요청 및 트랜잭션 식별자
- 사물 인터넷: 중앙 등록 없이 장치 식별
- 데이터 동기화: 여러 데이터 저장소 간 레코드 식별
- 소프트웨어 라이선싱: 고유 제품 또는 라이선스 키