Hacker News인프라 · 데브옵스

UUIDv7, 생각보다 신뢰할 수 없다

원제 UUIDv7 doesn't have the properties you think it does

102 포인트댓글 88
Key Point

구현 선택에 따라 단조성, 정확한 타임스탐프, 보안성이 보장되지 않을 수 있으므로 UUIDv7 사용 시 각 구현의 실제 동작과 제약을 파악해야 한다.

핵심 요약

  • UUIDv7은 단조증가 ID, 정확한 타임스탬프, 예측 불가능성을 제공한다고 알려져 있지만 RFC 호환 구현 중 많은 것이 이 속성들을 위반한다.
  • RFC 9562는 타임스탬프를 시스템 시계에서 직접 유도하지 않고 임의로 변경하도록 허용하기 때문에, UUID에 내장된 타임스탐프가 객체 생성 시간과 맞지 않을 수 있다.
  • Python 표준 라이브러리의 uuid7()은 카운터 오버플로우 시 타임스탬프를 미리 증가시키는데, 시스템 클록이 역행하면 타임스탬프가 시스템 시간보다 임의로 크게 앞서갈 수 있다.
  • 고부하 상황에서 ID 생성 속도가 밀리초당 1개를 초과하면 타임스탬프 차이가 한계 없이 증가하는 '도망치는' 현상이 발생한다.
  • UUID에 포함된 타임스탬프는 URL 같은 ID를 공유할 때 생성 시간을 노출시킬 수 있으며, 특정 보안 컨텍스트에서 메타데이터 유출 우려가 있다.
  • UUIDv7은 1970년대부터 알려진 논리상 불가능한 문제(여러 노드 간 완벽한 시각 동기화)를 해결한다고 주장하는데, 실제로는 엄격한 단조성을 보장하지 못한다.
  • 밀리초 단위 타임스탬프만 사용하고 카운터가 없는 구현은 작은 반복문 내에서도 비정렬 ID를 생성한다.
  • RFC는 시계 역행 처리를 광범위하게 논의하지만, 조사한 UUIDv7 구현 중 마지막 사용 타임스탬프를 영구 저장소에 기록하는 것을 발견하지 못했다.
  • 프로세스 재시작 후 시계가 역행했다면 구현은 비정렬 ID를 생성한다.
  • UUIDv7은 구현 선택의 자유도가 큰 아이디어들의 혼합물이므로, 각 구현마다 제공하는 속성이 크게 다르고 같은 표준 라이브러리 내 구현도 시간에 따라 동작이 변할 수 있다.
  • UUIDv7 구현 선택 시 RFC 준수 여부, 추가 보장사항, 보장 조건, 타임스탐프 변경 시나리오, ID 예측 가능성을 명확히 물어봐야 한다.
  • 유일성과 충돌 회피만이 UUIDv7이 엄격하게 제공할 수 있는 유일한 속성이다.
AI 요약 안내

AI가 한국어로 정리한 내용입니다. 정확한 정보는 원문을 확인해 주세요.

요약 원칙 ↗