UUID란?
UUID(Universally Unique Identifier, 범용 고유 식별자)는 분산 컴퓨팅 환경에서 정보를 고유하게 식별하기 위한 표준화된 체계입니다. 이는 1980년대 후반 Apollo Computer사에서 처음 개발되었으며, 이후 Open Software Foundation(OSF)에 의해 표준화되었습니다.
UUID는 128비트의 숫자로 구성되어 있으며, 이는 약 340간(3.4 x 10^38)개의 고유한 값을 표현할 수 있음을 의미합니다. 일반적으로 이 값은 32개의 16진수로 표현되며, 가독성을 높이기 위해 8-4-4-4-12 형식으로 하이픈이 삽입되어 총 36자리의 문자열로 표시됩니다. 예를 들어 '550e8400-e29b-41d4-a716-446655440000'과 같은 형태를 가지며, 각 부분은 특정한 의미를 담고 있습니다.
UUID의 가장 큰 특징은 중앙 집중식 조정 없이도 전역적으로 고유한 식별자를 생성할 수 있다는 점입니다. 이는 여러 시스템이나 애플리케이션에서 동시에 UUID를 생성하더라도, 실질적으로 중복될 가능성이 극히 낮다는 것을 의미합니다. 이러한 특성 때문에 UUID는 현대의 분산 시스템에서 광범위하게 활용되고 있습니다. 데이터베이스의 기본 키(Primary Key), 대규모 파일 시스템의 파일 식별자, 웹 애플리케이션의 세션 관리, 그리고 노션과 같은 협업 도구의 문서 식별자 등 다양한 용도로 사용되고 있습니다.
UUID v1
시간 기반으로 생성되는 UUID 버전으로, 현재 타임스탬프와 시스템의 MAC 주소를 조합하여 생성됩니다. 타임스탬프는 100나노초 단위의 정밀도를 가지며, MAC 주소를 사용함으로써 서로 다른 컴퓨터에서 생성된 UUID의 고유성을 보장합니다. 단, MAC 주소가 노출될 수 있다는 보안상의 우려가 있어, 일부 구현에서는 임의의 노드 ID를 사용하기도 합니다.
# UUID v1 생성
uuid_v1 = uuid.uuid1()
print(f"UUID v1: {uuid_v1}")
# 출력 예시: 550e8400-e29b-41d4-a716-446655440000
Python
복사
UUID v2
UUID v2는 DCE(Distributed Computing Environment) 보안을 위해 설계된 버전으로, 로컬 도메인과 로컬 식별자를 포함합니다. 시간 기반인 UUID v1을 기반으로 하되, 타임스탬프의 하위 비트를 로컬 식별자(UID/GID)로 대체하는 방식을 사용합니다. 하지만 실제 사용 사례가 매우 제한적이고 구현이 복잡하여 대부분의 프로그래밍 언어(Python 포함)에서는 공식적으로 지원하지 않습니다.
UUID v3
네임스페이스와 이름을 입력값으로 사용하여 MD5 해시 함수로 UUID를 생성하는 방식입니다. 동일한 네임스페이스와 이름으로는 항상 같은 UUID가 생성되므로, 결정적(deterministic) UUID가 필요한 경우에 유용합니다. 예를 들어, 도메인 이름이나 URL을 기반으로 일관된 UUID를 생성할 때 사용할 수 있습니다. 단, MD5의 보안 취약점 때문에 보안이 중요한 상황에서는 SHA-1을 사용하는 UUID v5가 권장됩니다.
# UUID v3 생성
namespace = uuid.NAMESPACE_DNS
uuid_v3 = uuid.uuid3(namespace, 'example.com')
print(f"UUID v3: {uuid_v3}")
# 출력 예시: 5df41881-3aed-3515-88a7-2f4a814cf09e
Python
복사
UUID v4
난수를 기반으로 생성되는 UUID 버전으로, 가장 일반적으로 사용됩니다. 완전히 임의의 값으로 생성되기 때문에 시간이나 하드웨어 정보에 의존하지 않아 예측이 불가능하고, 생성 시점이나 생성 위치에 관계없이 고유성을 보장할 수 있습니다. 또한 구현이 간단하고 보안성이 높아 대부분의 애플리케이션에서 권장되는 방식입니다. 충돌 가능성은 이론적으로 존재하지만, 실제로는 무시할 수 있을 정도로 낮습니다.
# UUID v4 생성
uuid_v4 = uuid.uuid4()
print(f"UUID v4: {uuid_v4}")
# 출력 예시: f47ac10b-58cc-4372-a567-0e02b2c3d479
Python
복사
UUID v5
UUID v5는 네임스페이스와 이름을 입력값으로 사용하여 SHA-1 해시 함수로 UUID를 생성하는 방식입니다. UUID v3와 유사하지만, MD5 대신 더 안전한 SHA-1 해시 알고리즘을 사용합니다. 같은 네임스페이스와 이름으로는 항상 동일한 UUID가 생성되며, 이는 URL, 도메인 이름 등을 기반으로 일관된 식별자가 필요한 경우에 특히 유용합니다. UUID v3보다 보안성이 높아 현재는 v5가 더 권장됩니다.
# UUID v5 생성
namespace = uuid.NAMESPACE_URL
uuid_v5 = uuid.uuid5(namespace, 'https://example.com')
print(f"UUID v5: {uuid_v5}")
# 출력 예시: 2ed6657d-e927-568b-95e1-2665a8a09372
Python
복사