UUID의 진화: 버전 1, 6, 7의 이해
Universally Unique Identifier(UUID)는 중앙 집중식 조정 없이 고유한 키를 생성하는 신뢰할 수 있는 방법을 제공하면서 수십 년 동안 분산 시스템의 초석이 되어 왔습니다. 순수 무작위 수에 의존하는 UUID 버전 4가 가장 유명하고 널리 배포된 변형이지만, 관계형 데이터베이스 관리 시스템(RDBMS)에서 기본 키로 사용할 때 고유한 한계를 가집니다. 무작위성은 예측 불가능성에는 훌륭하지만 데이터베이스 인덱싱에는 치명적입니다. 무작위 UUID를 B-tree 인덱스에 삽입하면 심각한 페이지 분할과 인덱스 파편화가 발생하여 시간이 지남에 따라 쓰기 성능이 저하됩니다. 여기서 고유성과 연대순 정렬을 모두 만족하는 구조화된 대안으로 시간 기반 UUID(특히 버전 1, 6, 7)가 등장합니다.
UUID 버전 1은 고유성과 시간을 결합하려는 최초의 시도였습니다. 현재 타임스탬프, 클록 시퀀스 및 노드의 MAC 주소를 사용하여 식별자를 생성합니다. MAC 주소를 포함하여 서로 다른 머신 간의 공간적 고유성을 보장하고, 타임스탬프로 시간적 고유성을 보장했습니다. 그러나 UUID v1은 데이터베이스 인덱싱에 치명적인 결함이 있습니다. 타임스탬프의 가장 중요한 비트가 가장 낮은 시간 세밀도를 나타내도록 구성되어 있다는 점입니다. 간단히 말해, 시간이 지남에 따라 UUID 문자열의 시작 부분이 빠르고 예측할 수 없게 변경되어 순차 정렬 가능성이 깨집니다. 또한 MAC 주소 노출은 심각한 개인정보 및 보안 우려를 불러일으켜 많은 개발자가 v1을 완전히 포기하게 만들었습니다.
이러한 심각한 문제를 해결하기 위해 엔지니어링 커뮤니티는 UUID 버전 6과 버전 7을 도입했습니다. UUID v6은 본질적으로 재구성된 UUID v1입니다. v1의 타임스탬프 구성 요소를 재배치하여 가장 중요한 비트가 가장 높은 시간 세밀도(년, 월, 일)를 나타내고 초 이하 단위로 내려가도록 했습니다. 이 단순한 재배치를 통해 UUID v6 값은 시간순으로 어휘 정렬(Lexicographically sortable)이 가능해집니다. 오늘 v6 UUID를 생성하고 내일 또 하나를 생성하면 내일의 UUID가 오늘의 UUID 뒤에 정렬되어 데이터베이스 B-tree가 데이터를 삽입하는 방식과 완벽하게 일치합니다. 이는 v4와 관련된 인덱스 파편화와 v1의 정렬 불가 문제를 해결하면서 기존 UUID 구조를 기대하는 시스템과의 하위 호환성을 유지합니다.
UUID 버전 7은 이러한 최적화를 한 단계 더 발전시켜 데이터베이스 기본 키의 현대적 골드 표준을 제시합니다. v1 및 v6에서 사용되는 기존 그리구리력 에포크 대신 UUID v7은 표준 Unix 에포크 타임스탬프(1970년 1월 1일 UTC 미드나잇 이후의 밀리초)를 활용합니다. 이 타임스탬프는 식별자의 처음 48비트를 차지합니다. 나머지 비트는 암호학적으로 강력한 무작위 데이터로 채워집니다. 이 하이브리드 접근 방식은 고성능 데이터베이스 삽입에 필요한 강력한 순차 정렬 기능과 무작위 데이터 생성의 보안 및 개인정보 보호를 결합하여 두 가지 장점을 모두 제공합니다. 100% 무료 비공개 브라우저 내 UUID 생성기를 사용하면 서버 업로드 없이 안전하게 최신 식별자를 즉시 생성할 수 있습니다.