파이썬 uuid 모듈을 빠르게 사용하기 위한 치트시트입니다. UUID1/4/5 생성, 문자열 변환, 데이터베이스 키 활용, 버전별 차이점을 최소 예제로 정리합니다.
uuid 모듈은 **RFC 4122 기반의 고유 식별자(UUID)**를 생성합니다. 데이터베이스 키, 분산 시스템의 ID, 파일명 등에 널리 사용됩니다.
언제 이 치트시트를 보나?
전역적으로 고유한 ID가 필요할 때
데이터베이스의 기본 키로 UUID를 사용할 때
분산 시스템에서 충돌 없는 ID가 필요할 때
UUID 버전 요약
버전
생성 방식
특징
UUID1
MAC 주소 + 타임스탬프
시간순 정렬 가능, MAC 노출
UUID3
네임스페이스 + MD5
결정론적, 같은 입력 = 같은 출력
UUID4
완전 랜덤
가장 많이 사용, 예측 불가
UUID5
네임스페이스 + SHA-1
UUID3보다 안전
최소 예제
1. UUID4 - 가장 일반적
1
2
3
4
5
6
7
8
9
10
importuuid# 완전 랜덤 UUID (가장 많이 사용)id1=uuid.uuid4()print(id1)# 550e8400-e29b-41d4-a716-446655440000# 여러 개 생성ids=[uuid.uuid4()for_inrange(3)]foriinids:print(i)
2. UUID1 - 시간 기반
1
2
3
4
5
6
7
8
9
importuuid# MAC 주소 + 타임스탬프 기반id1=uuid.uuid1()print(id1)# 6ba7b810-9dad-11d1-80b4-00c04fd430c8# 동일 시점에 생성해도 다름 (시퀀스 번호)id2=uuid.uuid1()print(id1!=id2)# True
3. UUID5/UUID3 - 네임스페이스 기반
1
2
3
4
5
6
7
8
9
10
11
12
13
14
importuuid# UUID5 (SHA-1 기반) - 같은 입력 = 같은 출력namespace=uuid.NAMESPACE_DNSname="example.com"id1=uuid.uuid5(namespace,name)id2=uuid.uuid5(namespace,name)print(id1==id2)# Trueprint(id1)# cfbff0d1-9375-5685-968c-48ce8b15ae17# UUID3 (MD5 기반)id3=uuid.uuid3(namespace,name)print(id3)# 9073926b-929f-31c2-abc9-fad77ae3e8eb
importuuidimportbase64defshort_uuid():"""22자 URL-safe 짧은 UUID"""u=uuid.uuid4()returnbase64.urlsafe_b64encode(u.bytes).rstrip(b'=').decode('ascii')print(short_uuid())# 'VGhpcyBpcyBhbiBleGFt'defshorter_uuid():"""8자 짧은 ID (충돌 가능성 있음)"""returnuuid.uuid4().hex[:8]print(shorter_uuid())# 'a1b2c3d4'
importuuid# 미리 정의된 네임스페이스print(uuid.NAMESPACE_DNS)# DNS 이름용print(uuid.NAMESPACE_URL)# URL용print(uuid.NAMESPACE_OID)# ISO OID용print(uuid.NAMESPACE_X500)# X.500 DN용# 커스텀 네임스페이스MY_NAMESPACE=uuid.uuid5(uuid.NAMESPACE_DNS,"myapp.example.com")user_id=uuid.uuid5(MY_NAMESPACE,"user:alice")
UUID 버전 선택 가이드
1
2
3
4
5
6
7
8
9
10
11
12
13
importuuid# 완전 랜덤, 예측 불가 필요 → UUID4uuid.uuid4()# 같은 입력에 같은 ID 필요 → UUID5uuid.uuid5(uuid.NAMESPACE_DNS,"example.com")# 시간순 정렬 필요, MAC 노출 괜찮음 → UUID1uuid.uuid1()# 레거시 호환 (MD5) → UUID3uuid.uuid3(uuid.NAMESPACE_DNS,"example.com")
자주 하는 실수
1. 문자열로 비교
1
2
3
4
5
6
7
8
9
10
importuuidid1=uuid.uuid4()id2=uuid.UUID(str(id1))# UUID 객체로 비교print(id1==id2)# True# 문자열 비교 시 대소문자 주의print(str(id1).lower()==str(id2).lower())# True
2. UUID1의 프라이버시
1
2
3
4
5
6
7
importuuid# UUID1은 MAC 주소를 포함 (프라이버시 우려)id1=uuid.uuid1()print(id1.node)# MAC 주소 (정수)# 프라이버시가 중요하면 UUID4 사용