UUID 개요
UUID는 Universally Unique IDentifier의 약자로 말 그대로 범용 고유 식별자(일련 번호)라고 해석이 가능하다.
탄생 배경은 RFC 4122 에서 명시된 규약으로 네트워크 상에서 유일성(고유성)을 보장하는 식별자(ID)를 생성하기 위한 규약이다. 즉, UUID 규약을 통해 생성한 식별자(ID)는 중복되지 않는다고 생각하면 된다. (중복될 확률이 0에 가까움)
※ RFC(Request for Comments) : IFTF(국제 인터넷 표준화 기구, Internet Engineering Task Force)에서 제공하는 문서
UUID 형식
UUID는 128bit 숫자로 구성되며 보통 8, 4, 4, 12자리로 구성된 32자리 16진수로 표현하며 하이픈(-)을 써서 구분한다.
time_low | time_mid | time_hi_and_version | clock_seq_hi_and_resclock_seq_low | node |
8 | 4 | 4 | 4 | 12 |
예) f91877b8-388e-4557-9951-f1d90d8e8e0b
UUID 각 부위별 내용
명칭 | 저장 크기 (byte) |
표현 길이 (16진수) |
의미 (Wiki 제공) |
time_low | 4 | 8 | integer giving the low 32 bits of the time 시간의 low 32 bit를 부여하는 정수 |
time_mid | 2 | 4 | integer giving the middle 16 bits of the time 시간의 middle 16 bit를 부여하는 정수 |
time_hi_and_version | 2 | 4 | 4-bit “version” in the most significant bits, followed by the high 12 bits of the time 최상위 bit에서 4 bit의 "version" 그리고 시간의 high 12 bit |
clock_seq_hi_and_resclock_seq_low | 2 | 4 | 1 to 3-bit “variant” in the most significant bits, followed by the 13 to 15-bit clock sequence 최상위 bit에서 1~3 bit는 UUID의 레이아웃 형식, 그리고 13~15 bit는 clock sequence |
node | 5 | 12 | the 48-bit node id 48 bit 노드 id |
python에서 uuid 생성 방법
아주 간단하다.
import uuid
# 랜덤 UUID 생성
v_uuid = uuid.uuid4()
print( v_uuid )
여러가지 uuid 생성 방법
좀 더 구체적으로 하기와 같이 쓸 수 있다.
import uuid
# 1. 호스트 ID, sequence, 현재 시간을 기준으로 uuid 생성
print(uuid.uuid1())
# 2a. uuid1 규칙을 이용하되, 현 시스템의 MAC 주소(get_mac_address)를 추가해서 보다 강한 중복 방지를 부여함
unique_id = uuid.uuid1(node=get_mac_address())
# 2b. namespace uuid와 name에 대한 MD5 hash에서 uuid 생성, name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용
print(uuid.uuid3(uuid.NAMESPACE_URL, name))
# 3. 램덤한 uuid 생성
print(uuid.uuid4())
# 4 namespace uuid와 name에 대한 SHA-1 hash에서 uuid 생성 , name은 아무 값이나 상관없으나 보통 url 주소(www.sample.com 과 같은)를 사용
print(uuid.uuid5(uuid.NAMESPACE_URL, url))
특이 사항
생성된 uuid는 uuid 객체 이므로 그대로 사용하면
UUID('022dfbec-7a09-4f9a-98e7-ab35254a401f')
처럼 UUID( '문자열' ) 형식으로 저장된다.
따라서
uuid_str = str( uuid.uuid4())
로 변환하여 사용하는 것이 필요하다.
예제)
a = uuid.uuid4() ; print(a)
→ print문이 내부 변환(즉 class 내 toString()을 호출..)하여 d227f781-3a25-40b2-929d-4a48922effee 로 출력
b = [a] ; print(b)
→ [UUID('d227f781-3a25-40b2-929d-4a48922effee')] 처럼 uuid 객체 형태를 출력
c = str(a) ; print(c)
→ 문자열 d227f781-3a25-40b2-929d-4a48922effee 출력
'programming > Python' 카테고리의 다른 글
os.walk - 하위 디렉토리 포함 모든 파일 탐색 (0) | 2025.04.10 |
---|---|
venv 가상환경 (0) | 2024.08.21 |
파이썬 패턴 (0) | 2024.06.12 |
파일, 디렉토리 관리 (0) | 2024.06.12 |
DataFrame, Column name 변경 (0) | 2020.09.06 |