피드로 돌아가기
Stop using UUID v4 as your database primary key
Dev.toDev.to
Database

UUID v4의 Randomness로 인한 B-tree 파편화 해결 및 v7 도입을 통한 Write 성능 최적화

Stop using UUID v4 as your database primary key

Mike Knights2026년 5월 8일2intermediate

Context

UUID v4의 무작위성으로 인해 B-tree Index의 임의 지점에 데이터가 삽입되며 Page Split 및 Index Fragmentation 발생. 데이터 규모 증가에 따라 Write 성능이 지속적으로 저하되는 구조적 한계 노출.

Technical Solution

  • RFC 9562 표준 기반의 UUID v7 도입을 통한 Sequential Insertion 구조 확보
  • 상위 48비트에 Unix Millisecond Timestamp를 배치하여 시간 순서에 따른 정렬 가능 상태 구현
  • Integer Primary Key의 순차적 삽입 이점과 UUID의 Global Uniqueness를 동시에 달성하는 하이브리드 설계
  • B-tree Index의 불필요한 Rebalancing 제거를 통한 저장 공간 효율성 및 쓰기 처리량 개선
  • 기존 UUID v4와 동일한 포맷 및 길이를 유지하여 별도의 스키마 변경 없는 Drop-in Replacement 적용
  • 내부 레코드 및 이벤트 로그 등 순서 보장이 필요한 도메인에 우선 적용하는 전략적 선택

- 신규 프로젝트 설계 시 기본 PK 전략으로 UUID v7 채택 검토 - 기존 v4 사용 테이블의 경우 마이그레이션 없이 신규 데이터부터 v7을 적용하여 점진적 최적화 수행 - 사용자 ID 등 생성 시점 노출이 보안 리스크가 되는 Public API 엔드포인트에는 UUID v4 유지

원문 읽기