주로 분산 컴퓨팅 환경에서 사용되는 식별자
중앙관리시스템이 있는 환경이라면 각 세션에 일련번호를 부여해줌으로써 유일성을 보장할 수 있음
중앙에서 관리되지 않는 분산 환경이라면 개별 시스템이 id를 발급하더라도 유일성이 보장되어야 함
이를 위해 탄생한 것이 범용고유식별자 UUID (Universally Unique IDentifier)
고유성은 UUID가 서로 다른 것을 보장해주는 다양한 구성요소를 조합하는 식으로 달성 됨
이 경우 식별자는 장비의 네트워크 주소, 타임스탬프, 무작위로 생성된 구성요소로 구성 됨
따라서 UUID는 식별자의 고유성을 보장하는 여러 구성요소로 구성된 특정 형식의 고유한 문자열을 만드는 데 사용되는 알고리즘이라 할 수 있음
UUID는 128비트의 숫자이며, 32자리의 16진수로 표현
여기에 8-4-4-4-12 글자마다 하이픈을 집어넣어 5개의 그룹으로 구분
예: 550e8400-e29b-41d4-a716-446655440000
UUID는 국제 인터넷 표준화 기구인 ietf에서 정식 표준으로 채택된 표준 프로토콜로 RFC 4122 문서를 기반으로 생성
UUID 버전은 1, 3, 4, 5가 있으며 이중 많이 쓰이는 것은 버전 1과 4
버전1: 타임스탬프를 기준으로 생성하는 방식
버전3: MD5 해시를 이용해 생성하는 방식
버전4: 랜덤으로 생성하는 방식
버전5: SHA-1 해시를 이용해 생성하는 방식
파이썬의 uuid 모듈 사용
모듈은 파이썬 배포판에 포함돼 있으므로 설치할 필요 x
간단히 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')
uuid 안에는 uuid1(), uuid3(), uuid4(), uuid5() 4개의 함수 존재
uuid.uuid1(node=None, clock_seq=None)
호스트ID, 시퀀스 번호 및 현재시간으로 uuid를 생성
uuid.uuid3(namespace, name)
네임 스페이스 UUID와 이름(문자열)의 MD5 해시에서 UUID를 생성
uuid.uuid4()
랜덤 UUID를 생성
uuid.uuid5(namespace, name)
네임 스페이스 UUID와 이름(문자열)의 SHA-1 해시에서 UUID를 생성