UUID 생성기 - 범용 고유 식별자 생성 도구
UUID Generator
UUID (범용 고유 식별자) 가이드
UUID란?
UUID(Universally Unique Identifier)는 정보 시스템에서 개체를 고유하게 식별하는 128비트 길이의 식별자입니다. 32개의 16진수로 표현되며, 8-4-4-4-12 형식으로 하이픈으로 구분됩니다.
UUID 버전별 특징
Version 1 (시간 기반)
- 타임스탬프와 노드 ID 사용
- 시간 순서 보장
- 생성 시점 추적 가능
- MAC 주소 노출 가능성
예시: 550e8400-e29b-11d4-a716-446655440000
Version 4 (랜덤)
- 랜덤 또는 의사 랜덤 숫자 사용
- 높은 고유성 보장
- 가장 널리 사용되는 버전
- 시간 정보 없음
예시: 123e4567-e89b-12d3-a456-426614174000
Version 5 (이름 기반, SHA-1)
- 네임스페이스와 이름 사용
- SHA-1 해시 알고리즘 적용
- 동일 입력 시 동일 UUID 생성
- 결정적 생성 방식
예시: 123e4567-e89b-52d3-a456-426614174000
UUID 활용 사례
1. 데이터베이스
- 기본 키(Primary Key)
- 분산 시스템에서의 레코드 식별
- 데이터 동기화 식별자
2. 분산 시스템
- 마이크로서비스 간 트랜잭션 ID
- 이벤트 소싱에서의 이벤트 ID
- 분산 추적 식별자
3. 파일 시스템
- 파일 이름 충돌 방지
- 임시 파일 식별
- 업로드 파일 관리
UUID 생성 시 고려사항
1. 성능
- 버전 1: 빠른 생성, 시간 정렬 가능
- 버전 4: 중간 수준의 성능
- 버전 5: 해시 계산 필요
2. 보안
- MAC 주소 노출 위험
- 예측 가능성 고려
- 랜덤성 보장 필요성
3. 저장 공간
- 문자열: 36바이트
- 바이너리: 16바이트
- 인덱싱 영향 고려
모범 사례
1. 생성
// 버전 4 UUID 생성
const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (Math.random() * 16) | 0
const v = c === 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
2. 검증
const isValidUUID = (uuid: string): boolean => {
const regex =
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
return regex.test(uuid)
}
3. 저장
-- PostgreSQL
CREATE TABLE items (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL
);
일반적인 실수
1. 생성 관련
- 불충분한 랜덤성
- 잘못된 버전 선택
- 중복 검사 누락
2. 사용 관련
- 불필요한 UUID 사용
- 부적절한 버전 선택
- 과도한 저장 공간 사용
3. 성능 관련
- 인덱싱 최적화 부족
- 불필요한 문자열 변환
- 과도한 UUID 생성
결론
UUID는 분산 시스템에서 고유 식별자가 필요한 경우에 매우 유용한 도구입니다. 각 버전의 특성을 이해하고 적절한 상황에 맞는 버전을 선택하는 것이 중요합니다.
키워드
UUID, 고유식별자, 개발도구, 식별자생성, 데이터베이스, 분산시스템, 마이크로서비스