UUIDv7은 UUIDv4의 한계를 극복하며 보안과 성능을 모두 잡은 새로운 식별자 형식입니다.
UUIDv4와 UUIDv7의 차이점
- UUIDv4: 완전히 무작위적인 식별자를 생성하여 예측 불가능하며 보안에 강합니다. 그러나 무작위성 때문에 새로운 행이 인덱스 페이지에 산발적으로 추가되어 데이터베이스 인덱스 성능을 저하시킬 수 있습니다.
- UUIDv7: 외형은 UUIDv4와 유사하지만, 식별자의 첫 부분이 생성 시점의 타임스탬프를 인코딩합니다. 이 시간 기반 접두사는 연속적인 삽입이 동일한 인덱스 페이지에 모이도록 하여 인덱스 단편화를 줄이고 성능을 향상시킵니다.
UUIDv7의 주요 이점
- 시간 순서 정렬: ID만으로도 데이터 생성 시간 순서대로 자동으로 정렬할 수 있어
created_at컬럼과 별도의 인덱스가 필요 없어집니다. - 향상된 인덱스 성능: 시간 기반 접두사 덕분에 연속적인 데이터 삽입 시 인덱스 페이지의 효율성이 높아져 UUIDv4 대비 성능이 개선됩니다.
- 충돌 저항성: 타임스탬프와 함께 포함된 무작위 비트 덕분에 동일한 밀리초에 여러 행이 생성되더라도 고유한 ID를 보장합니다.
- 보안 유지: 여전히 비순차적이고 예측하기 어려운 ID이므로 열거 공격을 효과적으로 방지합니다.
UUIDv7 구조 예시0199e46c-4b68-765f-ad72-d388d2e2ef22* 0199e46c-4b68: 타임스탬프 (밀리초 단위)
7: UUID 버전 (항상 7)65f: 서브-밀리초 정밀도 / 무작위a: 변형 + 무작위d72-d388d2e2ef22: 무작위PostgreSQL 18은uuidv7()함수를 기본으로 제공하여 쉽게 활용할 수 있습니다.