이 튜토리얼에서는 uuid 모듈을 사용하여 Python에서 UUID를 생성하는 방법에 대해 설명합니다. 이 주제를 살펴보기 전에 UUID의 기본 개념을 이해해 봅시다.
소개
UUID는 의 약칭이다. 보편적으로 고유한 식별자 GUID(Globally Unique Identifier)라고도 합니다. 문서, 사용자, 자원 또는 정보를 고유하게 정의하는 128비트 길이의 ID 번호입니다. UUID에는 다양한 버전이 있습니다. 다음 섹션에서 이에 대해 모두 논의하겠습니다.
- UUID는 공간과 시간에 걸쳐 고유한 식별자를 정의하는 데 사용됩니다. 공간과 시간은 표준에 따라 UUID가 생성되면 식별자가 기존 리소스와 중복될 수 없음을 의미합니다.
- UUID는 고유성이 필요할 때 가장 적합한 옵션입니다.
- 암호화 및 해싱 애플리케이션에서 필수적인 역할을 합니다.
UUID를 사용해야 하는 경우
UUID 모듈은 다음 시나리오에서 사용할 수 있습니다.
웹 애플리케이션에서 -
- UUID는 다음을 생성하여 상태를 관리하는 데 도움이 됩니다. 고유한 세션 ID
- 일반적으로 우리는 자동 증가 값을 사용하여 사용자 ID를 생성합니다. 이는 매우 간단한 접근 방식이며 추측하기 쉽습니다. 하지만 UUID는 연속적으로 생성되지 않기 때문에 추측하기가 어렵습니다.
데이터베이스 시스템에서
자바 기초
- UUID는 환경에 독립적이기 때문에 데이터베이스에 상당한 이점을 제공합니다. 이는 모든 애플리케이션을 사용하여 모든 시스템에서 UUID를 생성할 수 있음을 의미합니다.
- 대부분의 애플리케이션은 데이터베이스 서버에 의존하여 고유 키 또는 기본 키를 생성합니다. UUID는 데이터베이스의 키 생성 접근 방식을 변경하는 데 도움이 되는 고유한 데이터베이스 키를 생성하는 좋은 옵션입니다.
- UUID는 SQL 테이블의 숫자와 같은 의사 값이 아닌 실제 값입니다.
Python uuid 모듈
Python uuid 모듈은 인터넷 사회의 표준이자 Copyright ©인 RFC 4122에 따라 구현됩니다. Python UUID 모듈의 도움으로 1, 3, 4, 5 버전 UUID와 같은 다양한 유형의 UUID를 생성할 수 있습니다. Python 모듈은 다음 버전의 UUID를 지원합니다.
Python UUID 모듈을 사용하여 UUID 생성
Python uuid 모듈을 사용하여 다양한 버전의 UUID를 생성해 보겠습니다.
uuid1() 사용 - uuid를 생성하려면 uuid 모듈을 가져온 다음 uuid1() 메서드를 호출해야 합니다. 다음 예를 이해해 봅시다.
예시 - 1
import uuid # Printing random id using uuid1() print ('The random generated uuid is : ', uuid.uuid1())
산출:
The random id using uuid1() is : ab2d0fc0-7224-11ec-8ef2-b658b885fb3
UUID의 구조
위의 UUID에는 5개의 구성 요소가 있으며 각 구성 요소의 길이는 동일하다는 것을 알 수 있습니다. UUID의 구조는 다음과 같은 형식입니다. '8-4-4-4-12'.
UUID 문자열 표현은 다음과 같습니다.
UUID = time_low '-' time_mid '-'time_high_and_version ' 'clock_seq_and_reserved_And_clock_seq_low'-' Node.
위의 UUID 필드를 분석해 보겠습니다.
자바 재정의하는 방법
bytes, int, hex 등 다양한 형식으로 UUID를 생성하는 또 다른 예를 살펴보겠습니다.
예 - 2:
import uuid id = uuid.uuid1() # Representations of uuid1() print ('The byte Representations of uuid1() are : ') print (repr(id.bytes)) print ('Integer Value Representation: ',end='') print(id.int) print ('hex Value Representation : ',end='') print (id.hex) print(' ') # The components of uuid1() print ('The components of uuid1() are : ') print ('Version : ',end='') print (id.version) print ('Variant : ',end='') print (id.variant) print(' ') # Fields of uuid1() print ('The Fields of uuid1() are : ') print ('Fields : ',end='') print (id.fields) print('UUID.fields :', id.fields) print('Prining each field seperately') print('UUID.time_low : ', id.time_low) print('UUID.time_mid : ', id.time_mid) print('UUID.time_hi_version : ', id.time_hi_version) print('UUID.clock_seq_hi_variant: ', id.clock_seq_hi_variant) print('UUID.clock_seq_low : ', id.clock_seq_low) print('UUID.node : ', id.node) print('UUID.time : ', id.time) print('UUID.clock_seq : ', id.clock_seq) print('UUID.SafeUUID : ', id.is_safe) print(' ') # The time Component of uuid1() print ('The time Component of uuid1() is : ') print ('Time component : ',end='') print (id.node)
산출:
The byte Representations of uuid1() are : b'xb9xeaxb88sx0ex11xecxbfvx86xa0;xe4`x12' int Representation : 247125913120858544596828814248071421970 hex Representation : b9eab838730e11ecbf7686a03be46012 The Components of uuid1() are : Version : 1 Variant : specified in RFC 4122 The Fields of uuid1() are : Fields : (3119167544, 29454, 4588, 191, 118, 148022757711890) The time Component of uuid1() is : Time component : 148022757711890 UUID.time_mid : 29460 UUID.time_hi_version : 4588 UUID.clock_seq_hi_variant: 186 UUID.clock_seq_low : 100 UUID.node : 90979746151630 UUID.time : 138612218401246920 UUID.clock_seq : 14948 UUID.SafeUUID : SafeUUID.unsafe
UUID1의 단점
UUID1은 컴퓨터의 MAC 주소와 연결되어 있으므로 개인 정보 보호에 위협이 될 수 있습니다. 그러나 이는 완전한 고유성을 제공합니다.
방법 2: uuid4() 사용
이 방법은 개인 정보 보호를 보장하면서 난수를 생성합니다. 다음 예를 이해해 봅시다.
예 -
import uuid id = uuid.uuid4() # Id generated using uuid4() print ('The id generated using uuid4() : ',end='') print (id)
산출:
The id generated using uuid4() : 53967be6-71e9-4ee9-9912-60d02d2d9b0a
uuid1() 대 uuid4
그만큼 uuid1() 충돌이 발생하지 않도록 보장합니다. 100ns 이내에 16384개 이상의 uuid1을 생성하여 UUID의 복제본을 생성할 수 있습니다. 개인정보 보호를 보장하지 않습니다. 그만큼 uuid1() 컴퓨터의 MAC 주소를 표시하고 싶지 않은 경우에는 권장되지 않습니다.
uuid4() 메서드는 암호화 방식으로 생성된 보안 번호 생성기를 사용하여 임의의 UUID를 생성합니다. 보다 안전한 UUID를 생성합니다. UUID를 별도의 컴퓨터에서 생성해야 하는 경우 권장됩니다.
이름 기반 UUID를 생성하는 UUID 3 및 UUID 5
이름 기반 UUID는 버전 3 또는 5 UUID를 사용하여 UUID를 생성할 수 있음을 의미합니다.
이름과 네임스페이스를 사용하여 일련의 고유한 UUID를 만들 수 있습니다. 버전 3과 5는 이름이 포함된 해싱 네임스페이스 식별자입니다.
ROM
그만큼 uuid3() 메소드는 네임스페이스 식별자의 MD5 해시와 문자열을 기반으로 UUID를 생성합니다. 반면, uuid5() 메소드는 네임스페이스 식별자의 SHA-1 해싱 기법을 기반으로 UUID를 생성합니다.
다음은 uuid3() 또는 uuid5()에 의해 정의된 네임스페이스 식별자입니다.
다양한 호스트 이름과 네임스페이스를 사용하여 UUID3 및 UUID5를 생성하는 다음 예를 이해해 보겠습니다.
예 -
import uuid host_names = ['javatpoint.com', 'tutorialandexample.com'] for host in host_names: print('Generate uuid 3 version using name as',host,' and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, host)) print('Generate uuid 5 version using name as', host, ' and namespace as uuid.NAMESPACE_DNS'), print(uuid.uuid5(uuid.NAMESPACE_DNS, host)) print()
산출:
Generate uuid 3 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate uuid 5 version using name as javatpoint.com and namespace as uuid.NAMESPACE_DNS 0fc2d4dd-7194-5200-8050-f0ca1dd04b3d Generate uuid 3 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 6f6fe445-1c4c-3874-854e-c79f617effe5 Generate uuid 5 version using name as tutorialandexample.com and namespace as uuid.NAMESPACE_DNS 781c3cc9-4965-5fdc-9c40-89bb0ea8ec0d
예 - 2: 다른 네임스페이스를 사용하여 UUID 3 및 UUID 5 생성
import uuid name_spaces = [uuid.NAMESPACE_DNS, uuid.NAMESPACE_URL, uuid.NAMESPACE_OID, uuid.NAMESPACE_X500] host_name = 'pynative.com' print('Generate uuid using namespace') for namespace in name_spaces: print('uuid 3 is', uuid.uuid3(namespace, host_name)) print('uuid 5 is', uuid.uuid5(namespace, host_name)) print()
산출:
Generate uuid using namespace uuid 3 is 6ddc8513-dc7b-3b37-b21b-a1ca9440fe14 uuid 5 is 8d6a1314-170a-559c-afe7-b68d1d7ee9ac uuid 3 is 5dcfef3e-bcc9-38bc-b989-4a7516a05974 uuid 5 is 3a4a6c31-8d6a-5583-8497-d2ed90b1f13a uuid 3 is 84d9730f-330f-3634-9542-4acfcdcd6c60 uuid 5 is 899f3d4b-6095-5ee6-9805-68e0c51dcb39 uuid 3 is b140fa3b-983a-3efe-85ef-92f07d5e09a0 uuid 5 is 73b723ef-5c5e-5eb4-8fcc-aabb5c4e7803
uuid3 및 uuid5의 동작
- 동일한 네임스페이스와 동일한 이름이 유사함에도 불구하고 UUID는 서로 다른 시간에 생성됩니다.
- 동일한 네임스페이스에 있는 두 개의 다른 네임스페이스가 다르기 때문에 고유한 ID를 생성합니다.
예시 - 3
import uuid print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com')) print('Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS') print(uuid.uuid3(uuid.NAMESPACE_DNS, 'javatpoint.com'))
산출:
Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb Generate version 3 uuid using name as pynative.com and namespace as uuid.NAMESPACE_DNS 98bbe92a-b38f-3289-a4b4-80ec1cfdf8cb
Python에서 문자열을 UUID로, UUID를 문자열로 변환하는 방법은 무엇입니까?
그만큼 uuid.uuid1() 메소드는 UUID 클래스의 인스턴스를 반환합니다. 다음을 사용하여 UUID의 문자열 표현을 얻을 수 있습니다. str() 방법. 해당 문자열 형식을 비교 또는 조작에 사용할 수 있습니다. 다음 예를 이해해 봅시다.
예 -
import uuid UUID1_VAL = uuid.uuid1() print('The version 1 UUID is ', UUID1_VAL) # convert a UUID to a string of hex digits in standard form print('The version 1 UUID in String format', str(UUID1_VAL)) # Use replace() method to remove dashes from string uuidString = str(UUID1).replace('-', '') print('Version 1 UUID in String removing dashes', uuidString)
산출:
The version 1 UUID is cdca7930-7488-11ec-a0c4-4984d2946471 UUID of version 1 in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String format cdca7930-7488-11ec-a0c4-4984d2946471 Version 1 UUID in String removing dashes cdca7930748811eca0c44984d2946471
이제 String에서 UUID를 생성하겠습니다.
때로는 UUID를 문자열 형식으로 가져오는 경우도 있습니다. 그리고 우리 애플리케이션은 일부 애플리케이션의 경우 UUID 클래스 인스턴스에서 이를 변환해야 합니다. 문자열 형식의 UUID를 변환하는 다음 예를 이해해 보겠습니다.
호주의 도시들
예 -
import uuid import uuid UUIDStrings = ['{c7c9de0a-d676-11e8-8d62-ccaf789d94a0}', '018c168c-d509-11e8-b096-ccaf789d94a0', 'urn:uuid:e5e9394c-daed-498e-b9f3-69228b44fbfa'] for string in UUIDStrings: # make a UUID from a string of hex digits (braces and hyphens ignored) myUUID = uuid.UUID(string) print('My UUID is', myUUID) print('My UUID time component is', myUUID.time) print()
산출:
10억에는 0이 몇 개나 있나요?
UUID is c7c9de0a-d676-11e8-8d62-ccaf789d94a0 Time component is 137595594281180682 UUID is 018c168c-d509-11e8-b096-ccaf789d94a0 Time component is 137594023292180108 UUID is e5e9394c-daed-498e-b9f3-69228b44fbfa Time component is 688728508333635916
예 - 2:
import uuid def display(message, l): print(message) for v in l: print(v) print() string_uuids = [ 'urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b', '{417a5ebb-01f7-4ed5-aeac-3d56cd5037b0}', '2115773a-5bf1-11dd-ab48-001ec200d9e0', ] display('string UUID', string_uuids) uuids = [ uuid.UUID(s) for s in string_uuids ] display('converted to uuids', uuids) uuids.sort() display('sorted value', uuids)
산출:
string UUID urn:uuid:f2f84497-b3bf-493a-bba9-7c68e6def80b {417a5ebb-01f7-4ed5-aeac-3d56cd5037b0} 2115773a-5bf1-11dd-ab48-001ec200d9e0 converted to uuids f2f84497-b3bf-493a-bba9-7c68e6def80b 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 2115773a-5bf1-11dd-ab48-001ec200d9e0 sorted value 2115773a-5bf1-11dd-ab48-001ec200d9e0 417a5ebb-01f7-4ed5-aeac-3d56cd5037b0 f2f84497-b3bf-493a-bba9-7c68e6def80b
재현 가능한 UUID 생성
앞서 언급했듯이 UUID에는 다양한 속성이 있습니다. 해당 속성을 사용하여 동일한 UUID를 사용할 수 있습니다. 사용하여 UUID 모듈 , 우리는 동일한 것을 생성할 수 있습니다 uuid 언제든지 시드 값을 사용합니다. 시드 값을 사용하여 동일한 UUID를 생성할 수도 있습니다. 두 개념을 모두 이해해 봅시다.
다음 입력을 사용하여 UUID 인스턴스를 생성할 수 있습니다.
- 끈
- 바이트
- Bytes_le
- 필드
- 정수
위의 값 중 하나를 사용하여 UUID를 생성할 수 있습니다. 동일한 UUID의 모든 값을 사용하는 다음 예를 살펴보겠습니다.
예 -
import uuid print('Generating UUID from int') UUID_x = uuid.UUID(int=236357465324988601727440242910546465952) print('UUID is', UUID_x) print('UUID from URN') UUID_x1 = uuid.UUID('urn:uuid:b1d0cac0-d50d-11e8-b57b-ccaf789d94a0') print('UUID is', UUID_x1) print('UUID from bytes') UUID_x2 = uuid.UUID(bytes=b'xb1xd0xcaxc0xd5 x11xe8xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x2) print('UUID from bytes_len') UUID_x3 = uuid.UUID(bytes_le=b'xc0xcaxd0xb1 xd5xe8x11xb5{xccxafxx9dx94xa0') print('UUID is', UUID_x3) print('UUID from fields') UUID_x4 = uuid.UUID(fields=(2983250624, 54541, 4584, 181, 123, 225054014936224)) print('UUID is', UUID_x4)
산출:
Generating UUID from int UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from URN UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from bytes_len UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 UUID from fields UUID is b1d0cac0-d50d-11e8-b57b-ccaf789d94a0
시드를 사용하여 UUID 재현
이름에서 알 수 있듯이 Faker 모듈은 가짜 데이터를 생성합니다. 우리는 동일한 UUID를 반복적으로 생성하기 위해 faker 모듈을 사용했습니다. 다음 예를 이해해 봅시다.
예 -
import uuid from faker import Faker fake_obj = Faker() fake_obj.seed(8754) print(faker_obj.uuid4()) fake_obj.seed(8754) print(fake_obj.uuid4())
산출:
b1d0cac0-d50d-11e8-b57b-ccaf789d94a0 b1d0cac0-d50d-11e8-b57b-ccaf789d94a0
결론
이 튜토리얼에서는 uuid 모듈에 대해 자세히 논의하고 다양한 UUID를 생성하는 방법을 이해했습니다. UUID는 애플리케이션/데이터베이스의 고유성을 정의하는 데 도움이 되며 문서, 호스트, 애플리케이션, 클라이언트 및 기타 상황에 대한 식별자를 정의하는 데도 도움이 됩니다.