Python

uuidRFC 9562 에 따른 UUID 객체

소스 코드: Lib/uuid.py


이 모듈은 불변의 UUID 객체(UUID 클래스)와 RFC 9562 (이는 RFC 4122 를 대체함)에 명시된 특정 UUID 버전에 대응하는 UUID를 생성하기 위한 functions (예: UUID 버전 1을 위한 uuid1(), UUID 버전 3을 위한 uuid3() 등)를 제공합니다. UUID 버전 2는 RFC 범위 밖에 있으므로 의도적으로 제외되었습니다.

고유 ID만을 얻고자 한다면 uuid1() 또는 uuid4()를 호출하는 것이 좋습니다. uuid1() 함수는 컴퓨터의 네트워크 주소를 포함하여 UUID를 생성하므로 개인정보가 노출될 수 있음을 명심해야 합니다. uuid4()는 무작위 UUID를 생성합니다.

기본 플랫폼의 지원 여부에 따라, uuid1()은 “안전한” UUID를 반환하거나 그렇지 않을 수도 있습니다. 안전한 UUID는 두 프로세스가 같은 UUID를 얻지 못하게 하는 동기화 메서드에 의해 생성됩니다. UUID의 모든 인스턴스는 UUID의 안정성에 대한 정보를 중계하는 is_safe 어트리뷰트가 있고, 다음의 열거체를 사용합니다.

class uuid.SafeUUID

Added in version 3.7.

safe

플랫폼이 다중 프로세스에 안전한 방식으로 UUID를 생성합니다.

unsafe

다중 프로세스에 안전한 방식으로 생성되지 않습니다.

unknown

플랫폼이 UUID를 안전하게 생성하였는지에 대한 정보를 제공하지 않습니다.

class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)

32자리 16진수 문자열, bytes 인자에 빅 엔디안 순서 16바이트열, bytes_le 인자에 리틀 엔디안 순서 16바이트열, fields 인자에 여섯 개의 정수로 이루어진 튜플(32-bit time_low, 16-bit time_mid, 16-bit time_hi_version, 8-bit clock_seq_hi_variant, 8-bit clock_seq_low, 48-bit node), int 인자에 단일 128bit 정수 중 하나를 이용하여 UUID를 만듭니다. 16진수 문자열로 주어졌을 경우 중괄호, 붙임표(hyphen), URN 접두어는 모두 선택사항입니다. 예를 들어, 아래 표현들은 모두 같은 UUID를 산출합니다:

UUID('{12345678-1234-5678-1234-567812345678}')
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes=b'\x12\x34\x56\x78'*4)
UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +
              b'\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

hex, bytes, bytes_le, fields, 또는 int 중 정확히 하나가 제공되어야 합니다. version 인자는 선택 사항입니다. 입력될 경우, 결과로 생성된 UUID는 주어진 hex, bytes, bytes_le, fields, 또는 int 의 비트를 덮어쓰고 RFC 9562 에 따라 변종(variant)과 버전 번호가 설정됩니다.

UUID 객체끼리 비교할 때 UUID.int 어트리뷰트를 비교하여 수행합니다. UUID가 아닌 객체와 비교하면 TypeError가 발생합니다.

str(uuid)12345678-1234-5678-1234-567812345678과같이 32자리 16진수 UUID로 표현합니다.

UUID 객체는 다음과 같은 읽기 전용 어트리뷰트를 갖습니다.

UUID.bytes

16바이트 문자열(여섯 개의 빅 엔디안 순서 정수 필드 포함)인 UUID

UUID.bytes_le

16바이트 문자열(리틀 엔디안 순서 time_low, time_mid, time_hi_version)인 UUID

UUID.fields

UUID의 여섯 개의 정수 필드로 이루어진 튜플. 여섯 개의 개별 어트리뷰트와 두 개의 파생된 어트리뷰트도 사용 가능:

필드

의미

UUID.time_low

UUID의 처음 32비트입니다. 버전 1에만 관련이 있습니다.

UUID.time_mid

UUID의 다음 16비트입니다. 버전 1에만 관련이 있습니다.

UUID.time_hi_version

UUID의 다음 16비트입니다. 버전 1에만 관련이 있습니다.

UUID.clock_seq_hi_variant

UUID의 다음 8비트입니다. 버전 1 및 6에만 관련이 있습니다.

UUID.clock_seq_low

UUID의 다음 8비트입니다. 버전 1 및 6에만 관련이 있습니다.

UUID.node

UUID의 마지막 48비트입니다. 버전 1에만 관련이 있습니다.

UUID.time

버전 1 및 6의 경우 그레고리력 시작(1582-10-15 00:00:00) 이후 100나노초 간격으로 계산된 60비트 타임스탬프이며, 버전 7의 경우 Unix 에포크(1970-01-01 00:00:00) 이후 밀리초 단위로 계산된 48비트 타임스탬프입니다.

UUID.clock_seq

14비트 시퀀스 번호입니다. 버전 1 및 6에만 관련이 있습니다.

UUID.hex

32자리 소문자 16진수 문자열 UUID.

UUID.int

128bit 정수 UUID

UUID.urn

RFC 9562 에 명시된 대로의 URN 형식인 UUID입니다.

UUID.variant

UUID 변종은 UUID의 내부 레이아웃을 결정합니다. 이는 상수 RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, 및 RESERVED_FUTURE 중 하나입니다.

UUID.version

UUID 버전 번호(1~8; 변종이 RFC_4122 인 경우에만 의미가 있음).

버전 3.14에서 변경: UUID 버전 6, 7 및 8을 추가했습니다.

UUID.is_safe

플랫폼이 UUID를 다중 프로세스에 안전한 방식으로 생성했는지를 나타내는 SafeUUID의 열거체입니다.

Added in version 3.7.

uuid 모듈은 다음 함수들을 정의합니다:

uuid.getnode()

하드웨어 주소를 48bit 양의 정수로 가져옵니다. 최초 실행 시 별도의 프로그램으로 실행될 수 있고, 매우 느려질 수 있습니다. 하드웨어 주소를 얻기 위한 시도가 모두 실패하면, RFC 4122가 권장하는 대로 멀티캐스트 비트(첫 옥텟의 최하위 비트)가 1로 설정된 무작위 48bit 숫자를 선택합니다. “하드웨어 주소”는 네트워크 인터페이스의 MAC 주소를 뜻합니다. 여러 네트워크 인터페이스를 가진 머신에서 보편적으로 관리하는 MAC 주소(즉, 첫 번째 옥텟의 두 번째 최하위 비트가 unset인 경우)는 로컬에서 관리하는 MAC 주소보다 우선하지만, 순서를 보장하지는 않습니다.

버전 3.7에서 변경: 보편적으로 관리하는 MAC 주소는 로컬로 관리하는 MAC 주소보다 우선합니다. 전자는 주소가 전 세계적으로 고유함을 보장하지만, 후자는 그렇지 않기 때문입니다.

uuid.uuid1(node=None, clock_seq=None)

RFC 9562, §5.1 에 따라 호스트 ID, 시퀀스 번호 및 현재 시간을 기반으로 UUID를 생성합니다.

node 가 지정되지 않으면 getnode() 를 사용하여 하드웨어 주소를 48비트 양의 정수로 가져옵니다. 시퀀스 번호인 clock_seq 가 지정되지 않으면 가짜 무작위(pseudo-random) 14비트 양의 정수가 생성됩니다.

node 또는 clock_seq 가 예상 비트 수를 초과하는 경우, 가장 낮은 유의미한 비트(least significant bits)만 유지됩니다.

uuid.uuid3(namespace, name)

namespace 식별자(UUID)와 이름(bytes 객체 또는 UTF-8로 인코딩될 문자열)의 MD5 해시를 기반으로 RFC 9562, §5.3 에 따라 UUID를 생성합니다.

uuid.uuid4()

RFC 9562, §5.4 에 따라 암호학적으로 안전한 방식으로 무작위 UUID를 생성합니다.

uuid.uuid5(namespace, name)

namespace 식별자(UUID)와 이름(bytes 객체 또는 UTF-8로 인코딩될 문자열)의 SHA-1 해시를 기반으로 RFC 9562, §5.5 에 따라 UUID를 생성합니다.

uuid.uuid6(node=None, clock_seq=None)

RFC 9562, §5.6 에 따라 시퀀스 번호와 현재 시간을 사용하여 UUID를 생성합니다.

이것은 데이터베이스 지역성(locality)을 개선하기 위한 uuid1() 의 대안입니다.

node 가 지정되지 않으면 getnode() 를 사용하여 하드웨어 주소를 48비트 양의 정수로 가져옵니다. 시퀀스 번호인 clock_seq 가 지정되지 않으면 가짜 무작위(pseudo-random) 14비트 양의 정수가 생성됩니다.

node 또는 clock_seq 가 예상 비트 수를 초과하는 경우, 가장 낮은 유의미한 비트(least significant bits)만 유지됩니다.

Added in version 3.14.

uuid.uuid7()

RFC 9562, §5.7 에 따라 시간 기반 UUID를 생성합니다.

밀리초 미만의 정밀도가 없는 플랫폼 간의 이식성을 위해, 이 함수로 생성된 UUID는 48비트 타임스탬프를 포함하고 밀리초 내에서 단조성(monotonicity)을 보장하기 위해 42비트 카운터를 사용합니다.

Added in version 3.14.

uuid.uuid8(a=None, b=None, c=None)

RFC 9562, §5.8 에 따라 의사 무작위 UUID를 생성합니다.

매개변수가 지정된 경우, a, bc 는 각각 48, 12, 62비트의 양의 정수여야 합니다. 이 값이 예상되는 비트 수를 초과하면 하위 비트만 유지되며, 지정되지 않은 인수는 적절한 크기의 의사 무작위 정수로 대체됩니다.

기본적으로 a, bc 는 암호학적으로 안전한 의사 무작위 수 생성기(CSPRNG)에 의해 생성되지 않습니다. 보안이 중요한 상황에서 UUID를 사용해야 하는 경우 uuid4() 를 사용하십시오.

Added in version 3.14.

uuid 모듈은 uuid3() 또는 uuid5() 에서 사용되는 다음의 네임스페이스 식별자를 정의합니다.

uuid.NAMESPACE_DNS

이 이름 공간이 지정되면 name 문자열은 전체 도메인 이름(FQDN)입니다.

uuid.NAMESPACE_URL

이 이름 공간이 지정되면 name 문자열은 URL입니다.

uuid.NAMESPACE_OID

이 이름 공간이 지정되면 name 문자열은 ISO OID입니다.

uuid.NAMESPACE_X500

이 이름 공간이 지정되면 name 문자열은 DER이나 텍스트 출력 형식의 X.500 DN입니다.

uuid 모듈은 variant 어트리뷰트의 가능한 값에 대해 다음 상수를 정의합니다.

uuid.RESERVED_NCS

NCS 호환성을 위해 예약됨.

uuid.RFC_4122

RFC 4122 에 명시된 UUID 레이아웃을 지정합니다. 이 상수는 RFC 4122RFC 9562 로 대체되었음에도 불구하고 하위 호환성을 위해 유지됩니다.

uuid.RESERVED_MICROSOFT

마이크로소프트 호환성을 위해 예약됨.

uuid.RESERVED_FUTURE

추후 정의를 위해 예약됨.

uuid 모듈은 특별한 Nil 및 Max UUID 값을 정의합니다.

uuid.NIL

RFC 9562, §5.9 에 따라 128비트가 모두 0으로 설정되도록 지정된 특별한 형태의 UUID입니다.

Added in version 3.14.

uuid.MAX

RFC 9562, §5.10 에 따라 128비트가 모두 1로 설정되도록 지정된 특별한 형태의 UUID입니다.

Added in version 3.14.

더 보기

RFC 9562 - 범용 고유 식별자(UUID) URN 네임스페이스

이 명세는 UUID를 위한 통합 자원 식별자 이름 공간, UUID의 내부 형식 및 UUID 생성 방법을 정의합니다.

명령줄 사용법

Added in version 3.12.

uuid 모듈은 명령줄에서 스크립트로 실행할 수 있습니다.

python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5,uuid6,uuid7,uuid8}] [-n NAMESPACE] [-N NAME]

다음 옵션들이 지원됩니다:

-h, --help

도움말 메시지를 표시하고 종료합니다.

-u <uuid>
--uuid <uuid>

UUID를 생성하는 데 사용할 함수 이름을 지정합니다. 기본값은 uuid4() 입니다.

버전 3.14에서 변경: UUID 버전 6, 7 및 8 생성을 허용합니다.

-n <namespace>
--namespace <namespace>

네임스페이스는 UUID``이거나, 네임스페이스 이름으로 정의된 널리 알려진 미리 정의된 UUID인 ``@ns``입니다(예: ``@dns, @url, @oid, @x500). 이는 uuid3()uuid5() 함수에서만 필요합니다.

-N <name>
--name <name>

UUID를 생성하는 과정의 일부로 사용되는 이름입니다. 이는 uuid3()uuid5() 함수에서만 필요합니다.

-C <num>
--count <num>

num 개의 새로운 UUID를 생성합니다.

Added in version 3.14.

예제

uuid 모듈을 사용하는 전형적인 몇 가지 예제입니다:

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

>>> # get the Nil UUID
>>> uuid.NIL
UUID('00000000-0000-0000-0000-000000000000')

>>> # get the Max UUID
>>> uuid.MAX
UUID('ffffffff-ffff-ffff-ffff-ffffffffffff')

>>> # same as UUIDv1 but with fields reordered to improve DB locality
>>> uuid.uuid6()
UUID('1f0799c0-98b9-62db-92c6-a0d365b91053')

>>> # get UUIDv7 creation (local) time as a timestamp in milliseconds
>>> u = uuid.uuid7()
>>> u.time
1743936859822

>>> # get UUIDv7 creation (local) time as a datetime object
>>> import datetime as dt
>>> dt.datetime.fromtimestamp(u.time / 1000)
datetime.datetime(...)

>>> # make a UUID with custom blocks
>>> uuid.uuid8(0x12345678, 0x9abcdef0, 0x11223344)
UUID('00001234-5678-8ef0-8000-000011223344')

명령줄 예제

uuid 명령줄 인터페이스를 사용하는 전형적인 몇 가지 예시입니다:

# 무작위 UUID 생성 - 기본값으로 uuid4()가 사용됨
$ python -m uuid

# uuid1()을 사용하여 UUID 생성
$ python -m uuid -u uuid1

# uuid5를 사용하여 UUID 생성
$ python -m uuid -u uuid5 -n @url -N example.com

# 42개의 무작위 UUID 생성
$ python -m uuid -C 42