테크레시피

전세계 유일 식별자로 활용하는 UUID란?

UUID(Universally Unique Identifier)는 온라인 대전 시스템이나 랭킹 시스템 등에서 전 세계에서 유일한 값으로 서버에 연결하지 않고 만들 경우 활용하는 식별자다.

UUID는 전 세계에 중복 없는 독특한 값이 되도록 설계되어 있으며 고유성이 중앙 서버 등 요소에 의존하지 않도록 되어 있다. 이런 특징을 가진 UUID를 데이터베이스 기본키에 이용하면 타인 데이터베이스와 결합하거나 데이터를 다른 데이터베이스로 이동하는 걸 자유롭게 할 수 있게 된다. 반면 누구나 UUID를 생성할 수 있기 때문에 현재 전 세계에 존재하는 UUID를 추적할 수 없다는 단점도 함께 갖고 있다.

전 세계에 중복이 없는 독특한 가치를 실현하는 방법은 다수 존재한다. 하지만 UUID 구현은 IETF의 RFC 4122를 기반으로 5가지 생성 방법을 정의한다. 여기에 정의된 UUID는 128비트 열이 되고 보통 이 비트 열을 16진수로 표기해 8-4-4-4-12 형식으로 표시한다.

UUID가 어떤 형식으로 생성된 것인지는 이미지 속 M와 N 위치에 있는 문자를 보면 알 수 있다. 먼저 N의 첫 몇 비트에서 1 몇 개가 연속하느냐에 따라 UUID 형식인 변형이 정해져 있다. RFC 4122에선 첫 번째 비트를 1, 2번째 비트를 0으로 정하기 때문에 RFC 4122에 따라 UUID는 N의 위치에 8, 9, A, B 중 하나가 된다.

M의 위치에는 버전이 나와 있으며 첫 번째 4비트에서 5개 생산 방법 중 어떤 것을 하고 있는지 알 수 있다.

지금 일반적으로 이용하는 건 버전4로 128비트 중 버전 변형 정보를 나타내는 6비트를 뺀 128비트 모두 무작위로 결정한다. 완전 무작위로 결정하면 어딘가에서 중복이 발생할 수 있지만 중복될 위험은 현실에선 있을 수 없을 만큼 낮다.

예를 들어 100년간 계속 초당 10억 개 UUID를 생성한 경우에도 중복 UUID가 생성될 가능성은 50%다. 또 10조 개 UUID를 생성한 경우 중복 항목이 생성될 가능성은 0.00000006%다. 하지만 이런 계산은 진정한 난수를 이용한 경우 얘기다. UUID 생성에 사용하는 난수에 의해 중복 가능성은 높아진다. UUID는 세계에서 중복이 없는 독특한 가치라는 특징을 보호하기 위해 사용하는 난수 질에 주의를 기울일 필요가 있을 것이다. 관련 내용은 이곳에서 확인할 수 있다.