카테고리 없음
UUID란? (Universally Unique Identifier, 범용 고유 식별자)
idea9329
2025. 3. 5. 14:13
반응형
🔹 UUID (범용 고유 식별자)란?
UUID(Universally Unique Identifier)는 전 세계적으로 고유한 식별자를 생성하는 표준입니다.
- 128비트(16바이트) 길이의 고유한 값
- 중복 가능성이 거의 없음 (사실상 유일함)
- 네트워크, 데이터베이스, 파일 시스템 등에서 객체를 식별하는 데 사용됨
🔹 UUID 형식 (표준 구조)
UUID는 8-4-4-4-12 형식으로 구성된 32자리 16진수 문자열입니다.
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
✅ 예제 UUID
550e8400-e29b-41d4-a716-446655440000
- M: UUID 버전을 나타냄 (예: 4 → 랜덤 방식 UUID)
- N: UUID 변형을 나타냄 (RFC 4122 규격)
🔹 UUID 버전별 차이점
UUID는 여러 가지 생성 방식(버전)이 있으며, 가장 많이 사용하는 버전은 v1, v4입니다.
버전방식특징
v1 | 시간 기반 | - 현재 시간 + MAC 주소 기반 - 특정 하드웨어에서 UUID 추적 가능 (보안 취약) |
v2 | DCE 보안 | - v1과 비슷하지만 보안 향상 |
v3 | MD5 해시 | - 입력 값(Namespace + 데이터)으로 MD5 해시 생성 |
v4 | 랜덤 기반 | - 완전한 난수 기반 (충돌 확률 매우 낮음) |
v5 | SHA-1 해시 | - v3과 유사하지만 SHA-1 사용 (더 보안성 높음) |
✅ UUID v4가 가장 많이 사용됨 (랜덤 방식이라 보안성이 높고, 중복 가능성이 거의 없음)
🔹 UUID 생성 방법
📌 1. Python에서 UUID 생성
import uuid
# UUID v4 (랜덤)
print(uuid.uuid4())
# UUID v1 (시간 기반)
print(uuid.uuid1())
✅ 출력 예시
f47ac10b-58cc-4372-a567-0e02b2c3d479 # UUID v4
6b27b35e-9db5-11eb-9d3e-0242ac130003 # UUID v1
📌 2. Linux에서 UUID 생성
✅ UUID v4 생성
uuidgen
✅ UUID v1 생성
uuidgen -t
📌 3. MySQL에서 UUID 사용
MySQL에서도 기본적으로 UUID를 생성할 수 있습니다.
SELECT UUID();
✅ 출력 예시
550e8400-e29b-41d4-a716-446655440000
🔹 UUID가 사용되는 곳
✅ 데이터베이스 (PK, 식별자)
- 분산 환경에서 중복 없는 ID 생성 가능
- 예: MySQL, PostgreSQL, MongoDB의 UUID()
✅ 파일/디렉터리 명명
- 중복 없는 파일명 필요할 때 사용
- 예: backup_550e8400-e29b-41d4-a716.zip
✅ 네트워크 시스템
- 세션 ID, API 키, 토큰 등에 사용
- 예: OAuth, JWT에서 클라이언트 식별용으로 사용
✅ IoT & 분산 시스템
- 여러 서버 간 데이터 충돌 방지
- 예: Kafka, Kubernetes, Docker 컨테이너 ID
🔹 UUID vs AUTO_INCREMENT (DB에서 PK 선택)
UUID를 데이터베이스의 기본 키(PK)로 사용할지 AUTO_INCREMENT(자동 증가 ID)를 사용할지 고민될 수 있습니다.
구분UUIDAUTO_INCREMENT
고유성 | 글로벌 고유 | 테이블 내에서만 고유 |
충돌 가능성 | 매우 낮음 | 없음 |
정렬 성능 | 느림 (랜덤) | 빠름 (연속된 숫자) |
인덱스 성능 | 크기 큼 (16바이트) | 작음 (4~8바이트) |
보안성 | 높음 | 낮음 |
✅ 추천 선택
- UUID: 글로벌 식별자 필요할 때 (분산 환경, 마이크로서비스)
- AUTO_INCREMENT: 성능이 중요한 경우 (순차적 정렬 가능, 작은 테이블)
📌 정리 – UUID란?
- UUID(범용 고유 식별자)는 128비트(16바이트) 고유한 식별자
- 가장 많이 사용되는 형식은 UUID v4 (완전 랜덤)
- 데이터베이스 PK, 파일명, API 키, 네트워크 식별자 등에 활용
- 분산 시스템에서는 UUID가 필수이지만, 성능을 고려해야 함
🚀 중복 없는 식별자를 원한다면? → UUID 사용하면 안전함! 😊
반응형