UUID(Universally Unique Identifier)는 전 세계 어디에도 중복이 존재하지 않는 유일한 ID라는 특징이 있다. UUID에는 역사적 경위에 따라 몇 가지 버전이 존재하고 있지만 최근에는 2023년 10월 표준화 작업이 진행 중인 v7이 있다.
UUID는 128비트 숫자로 대부분을 무작위로 작성해 중복 확률을 한없이 제로에 가깝게 하고 실질적으로 전 세계 어디에도 존재하지 않는 유일한 ID로 간주할 수 있게 되어 있다. 하지만 완전히 수치가 랜덤이기 때문에 프라이머리 키로 사용하면 데이터베이스에서 성능상 문제가 발생해버려 UUID와는 별도로 데이터베이스용 일련번호를 갖는 등 궁리가 필요해지고 있었다.
빌드카이트(Buildkite) 제품도 이전 데이터보다 최근 데이터가 자주 액세스된다는 특성이 있다. 기본 키를 UUID로 설정하면 새 데이터가 인덱스에 무작위로 분산되므로 대규모 데이터세트에서 최신 데이터를 검색하려는 경우 많은 데이터베이스 인덱스 페이지를 스캔해야 하며 캐시 적중률이 떨어진다. 한편 1차키를 일련번호로 작성하면 단순하게 최신 데이터가 인덱스 오른쪽에 배치되어 캐싱하기 쉬운 구조가 된다는 장점이 있다.
이런 단점을 경감하기 위한 방법은 10년 이상에 걸쳐 모색되어 있어 대표적인 해결책으로선 엑스(Snowflake ID)나 인스타그램(ShardingID) 등 난수열 전에 타임스탬프를 붙이는 방법을 들 수 있다.
2022년 이런 타임스탬프를 활용하는 UUID 새 표준안이 주목받기 시작해 UUIDv7로 표준화 작업이 진행되기 시작했다. UUIDv7 구조는 처음 48비트가 밀리세컨드 단위 유닉스 타임스탬프가 되고 이후 UUID 버전과 변형을 나타내기 위해 6비트가 사용되고 그 외 74비트가 난수로 되어 있다.
UUIDv7을 기본키로 사용하면 데이터베이스용 일련번호 키를 생성하거나 관리할 필요가 없으며 애플리케이션 로직을 간소화할 수 있다. 더구나 UUIDv7은 표준 UUID 형식에 준거하기 때문에 기존 UUID용 코드나 라이브러리를 그대로 활용할 수 있어 간단하게 버전을 이행할 수 있다고 한다.
대안 대부분은 64비트이므로 128비트 UUID을 이용해 스토리지 용량을 많이 사용하게 되지만 데이터베이스 행당 스토리지 사용량에서 생각하면 무시할 수 있는 수준 문제다. 관련 내용은 이곳에서 확인할 수 있다.