uuid — RFC 9562에 따른 UUID 객체
uuid — RFC 9562에 따른 UUID 객체
이 모듈은 불변(immutable) UUID 객체(UUID 클래스)와, RFC 9562(RFC 4122를 대체함)에 지정된 특정 UUID 버전에 해당하는 UUID를 생성하는 함수를 제공해요. 예를 들어 UUID 버전 1용 uuid1(), UUID 버전 3용 uuid3() 등이에요. UUID 버전 2는 RFC의 범위 밖이므로 의도적으로 생략되었어요.
고유 ID만 필요하다면 uuid1() 또는 uuid4()를 호출하는 것이 좋아요. uuid1()은 컴퓨터의 네트워크 주소를 포함한 UUID를 만들기 때문에 프라이버시를 침해할 수 있다는 점에 주의하세요. uuid4()는 무작위 UUID를 만들어요.
본문
기본 플랫폼의 지원에 따라 uuid1()은 "안전한(safe)" UUID를 반환할 수도 있고 아닐 수도 있어요. 안전한 UUID는 두 프로세스가 같은 UUID를 얻을 수 없도록 보장하는 동기화 방법을 사용해 생성된 것이에요. 모든 UUID 인스턴스에는 UUID의 안전성에 대한 정보를 전달하는 is_safe 속성이 있어요:
classuuid.SafeUUID
safe— UUID가 플랫폼에 의해 다중 프로세스 안전 방식으로 생성됨unsafe— UUID가 다중 프로세스 안전 방식으로 생성되지 않음unknown— 플랫폼이 UUID가 안전하게 생성되었는지 여부에 대한 정보를 제공하지 않음
classuuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)
다음 중 하나로 UUID를 만들어요: 32개의 16진수 문자열, 빅엔디언 순서의 16바이트 문자열(bytes 인자), 리틀엔디언 순서의 16바이트 문자열(bytes_le 인자), 6개 정수의 튜플(fields 인자), 단일 128비트 정수(int 인자). 16진수 문자열이 주어지면 중괄호, 하이픈, URN 접두사는 모두 선택적이에요.
hex, bytes, bytes_le, fields, int 중 정확히 하나만 주어져야 해요. UUID 객체의 비교는 UUID.int 속성을 비교해 이루어지며, UUID가 아닌 객체와의 비교는 TypeError를 발생시켜요.
UUID 인스턴스는 다음 읽기 전용 속성을 가져요:
UUID.bytes— 16바이트 문자열의 UUIDUUID.bytes_le— 리틀엔디언 바이트 순서의 16바이트 문자열 UUIDUUID.fields— 6개 정수 필드의 튜플UUID.time_low— UUID의 처음 32비트. 버전 1에만 관련UUID.time_mid— 다음 16비트. 버전 1에만 관련UUID.time_hi_version— 다음 16비트. 버전 1에만 관련UUID.clock_seq_hi_variant— 다음 8비트. 버전 1과 6에만 관련UUID.clock_seq_low— 다음 8비트. 버전 1과 6에만 관련UUID.node— 마지막 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진수 문자열의 UUIDUUID.int— 128비트 정수의 UUIDUUID.urn— RFC 9562에 지정된 URN의 UUIDUUID.variant— UUID의 내부 레이아웃을 결정하는 변형.RESERVED_NCS,RFC_4122,RESERVED_MICROSOFT,RESERVED_FUTURE중 하나UUID.version— UUID 버전 번호(1~8, variant가 RFC_4122일 때만 의미 있음)UUID.is_safe— 플랫폼이 UUID를 다중 프로세스 안전 방식으로 생성했는지 나타내는SafeUUID열거
함수
- uuid.getnode() — 하드웨어 주소를 48비트 양의 정수로 가져와요. 처음 실행 시 별도 프로그램을 실행할 수 있어 느릴 수 있어요.
- uuid.uuid1(node=None, clock_seq=None) — 호스트 ID, 시퀀스 번호, 현재 시간에서 RFC 9562 §5.1에 따라 UUID를 생성해요.
- uuid.uuid3(namespace, name) — 네임스페이스 식별자(UUID)와 이름의 MD5 해시를 기반으로 RFC 9562 §5.3에 따라 UUID를 생성해요.
- uuid.uuid4() — 암호학적으로 안전한 방법으로 RFC 9562 §5.4에 따라 무작위 UUID를 생성해요.
- uuid.uuid5(namespace, name) — 네임스페이스 식별자와 이름의 SHA-1 해시를 기반으로 RFC 9562 §5.5에 따라 UUID를 생성해요.
- uuid.uuid6(node=None, clock_seq=None) — RFC 9562 §5.6에 따라 시퀀스 번호와 현재 시간에서 UUID를 생성해요. 데이터베이스 지역성(locality)을 개선하기 위한
uuid1()의 대안이에요. - uuid.uuid7() — RFC 9562 §5.7에 따라 시간 기반 UUID를 생성해요. 48비트 타임스탬프를 포함하고 42비트 카운터를 사용해 밀리초 내 단조성을 보장해요.
- uuid.uuid8(a=None, b=None, c=None) — RFC 9562 §5.8에 따라 의사 난수 UUID를 생성해요. 기본적으로 CSPRNG로 생성되지 않으므로, 보안에 민감한 상황에서는
uuid4()를 사용해요.
네임스페이스 식별자
- uuid.NAMESPACE_DNS — 완전한 도메인 이름
- uuid.NAMESPACE_URL — URL
- uuid.NAMESPACE_OID — ISO OID
- uuid.NAMESPACE_X500 — DER 또는 텍스트 출력 형식의 X.500 DN
variant 속성 상수
- uuid.RESERVED_NCS — NCS 호환용 예약
- uuid.RFC_4122 — RFC 4122에 주어진 UUID 레이아웃
- uuid.RESERVED_MICROSOFT — Microsoft 호환용 예약
- uuid.RESERVED_FUTURE — 미래 정의용 예약
특수 UUID 값
- uuid.NIL — 128비트 모두 0으로 설정된 특수 UUID(RFC 9562 §5.9). 버전 3.14에서 추가
- uuid.MAX — 128비트 모두 1로 설정된 특수 UUID(RFC 9562 §5.10). 버전 3.14에서 추가
명령줄 사용법 (Command-Line Usage)
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()사용-n <namespace>,--namespace <namespace>— 네임스페이스. UUID이거나@ns(@dns,@url,@oid,@x500같은 잘 알려진 UUID) 형태-N <name>,--name <name>— UUID 생성의 일부로 사용되는 이름-C <num>,--count <num>—num개의 새 UUID 생성
예제 (Examples)
>>> import uuid
>>> # 호스트 ID와 현재 시간 기반 UUID 생성
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')
>>> # 네임스페이스 UUID와 이름의 MD5 해시 사용
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')
>>> # 무작위 UUID 생성
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')