UUID(범용 고유 식별자)는 주어진 네임스페이스 안에서 값의 고유성을 보장할 수 있는 128비트 숫자로, 일반적으로 32자리 16진수 형태로 표현됩니다. 프로그램에서 생성한 객체를 추적하거나, Python이 대규모 식별자가 필요한 객체나 데이터를 다뤄야 할 때 매우 유용합니다. Python의 uuid 모듈은 이러한 값을 손쉽게 생성할 수 있는 다양한 함수를 제공하며, 그중 uuid3()와 uuid5()는 해시 알고리즘을 기반으로 결정론적(deterministic) UUID를 만듭니다.
기본 문법
uuid3(namespace, string) # MD5 해시 값을 사용하여 식별자를 생성합니다. uuid5(namespace, string) # SHA-1 해시 값을 사용하여 식별자를 생성합니다.
두 함수 모두 동일한 입력에 대해 항상 동일한 결과를 반환한다는 점이 특징입니다. 즉, 같은 네임스페이스와 문자열을 사용하면 언제 어디서든 같은 UUID를 얻을 수 있어 데이터 일관성이 중요한 시스템에서 활용도가 높습니다.
네임스페이스 종류
- NAMESPACE_DNS: 이름 문자열이 완전히 정규화된 도메인 이름(FQDN)일 때 사용합니다.
- NAMESPACE_URL: 이름 문자열이 URL일 때 사용합니다.
그 외에도 NAMESPACE_OID(ISO OID), NAMESPACE_X500(X.500 DN) 등의 네임스페이스가 제공됩니다.
아래 예제에서는 초기 문자열을 선택하여 이를 바탕으로 UUID를 생성하는 방법을 살펴봅니다.
예제 코드
import uuid
# 주어진 문자열
str1 = "www.tutorialspoint.com"
str2 = "https://www.Tutorialspoint.com"
print("Using uuid3, the generated ID is :
",
uuid.uuid3(uuid.NAMESPACE_URL, str1))
print("Using uuid3, the generated ID is :
",
uuid.uuid3(uuid.NAMESPACE_DNS, str2))
print("Using uuid5, the generated ID is :
",
uuid.uuid5(uuid.NAMESPACE_URL, str1))
print("Using uuid5, the generated ID is :
",
uuid.uuid5(uuid.NAMESPACE_DNS, str2))위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
실행 결과
Using uuid3, the generated ID is : e5051d13-d1a5-381a-bc21-5017b275a7f2 Using uuid3, the generated ID is : de365612-734a-38e3-abc4-6e3ffc7d61db Using uuid5, the generated ID is : a064f94e-5ff6-51e4-88e2-e2163a79abce Using uuid5, the generated ID is : b9761e0a-0ef3-5fd3-9ec4-86b6e073e61b
uuid3과 uuid5의 차이점
uuid3는 MD5 해시를 사용하는 반면, uuid5는 더 안전한 SHA-1 해시를 사용합니다. MD5는 충돌 가능성과 보안 취약점이 알려져 있으므로, 특별한 이유가 없다면 일반적으로 uuid5를 사용하는 것이 권장됩니다. 또한 두 함수는 난수가 아닌 입력값 기반으로 생성되기 때문에, uuid1()(MAC 주소 기반)이나 uuid4()(난수 기반)와 달리 동일한 입력에 대해 재현 가능한 ID가 필요한 경우에 적합합니다.