UUID v4가 맞는 경우
대부분의 웹앱, 일반 API, 추적용 식별자처럼 예측 불가능한 ID만 있으면 되는 경우엔 UUID v4가 기본값으로 충분합니다.
🔒 브라우저 내부 처리
랜덤 UUID와 시간 정렬형 UUID를 언제 고르는지, 데이터베이스 저장 전략과 운영 편의성까지 포함해서 정리한 실무 가이드입니다.
Decision
대부분의 웹앱, 일반 API, 추적용 식별자처럼 예측 불가능한 ID만 있으면 되는 경우엔 UUID v4가 기본값으로 충분합니다.
이벤트 로그, 메시지 큐, 시계열성 레코드처럼 생성 순서와 정렬 효율이 중요한 워크로드라면 UUID v7이 더 매력적일 수 있습니다.
라이브러리 호환성, DB 컬럼 타입, 기존 운영 도구, 로그 포맷까지 함께 바뀌는 경우가 많아서 전환 비용도 같이 봐야 합니다.
Trade-offs
UUID v4는 난수 기반이라 삽입 순서가 뒤섞입니다. UUID v7은 시간 기반 비트를 앞에 두기 때문에 일부 저장소에서는 정렬과 인덱스 지역성이 더 나아질 수 있습니다.
사람이 읽기엔 둘 다 어렵습니다. 그래서 실무에선 표준 UUID 문자열, hex(binary16), 로그용 표시 형식을 함께 다루는 변환 도구가 계속 필요합니다.
기존 시스템이 UUID v4를 쓰고 있는데 일부 서비스만 v7로 넘어가면, 검색 쿼리, 필터, 추적 문서까지 함께 업데이트해야 해서 혼합 상태 관리가 생각보다 까다롭습니다.
Workflow
Examples
입력
같은 순간에 각각 3개 생성
결과
v4 f47ac10b-58cc-4372-a567-0e02b2c3d479
v4 1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed
v4 7c9e6679-7425-40de-944b-e07fc1f90ae7
v7 01923f8a-1c4d-7000-8a3b-9f2e1d4c5b6a
v7 01923f8a-1c51-7000-8a3b-2c7d9e4f1a3b
v7 01923f8a-1c55-7000-8a3b-6b1a8c2d7e9f
v7은 앞부분이 거의 같습니다. 밀리초 타임스탬프가 들어 있어서 문자열 정렬만으로 생성 순서가 유지됩니다. v4는 앞부분부터 무작위입니다.
입력
01923f8a-1c4d-7000-8a3b-9f2e1d4c5b6a
결과
세 번째 그룹의 첫 글자가 버전
7000 -> v7
4372 -> v4
Troubleshooting
v4는 완전 난수라 B-tree 인덱스 곳곳에 삽입되어 페이지 분할이 잦고 캐시 적중률이 떨어집니다. 행이 수백만 건으로 늘어난 뒤에 체감되는 문제라 초기 설계에서 놓치기 쉽습니다. v7은 끝에 순차적으로 붙어 이 비용을 줄입니다.
v7에는 생성 밀리초가 그대로 들어 있어 가입 시점이나 주문 시각을 역산할 수 있습니다. 경쟁사가 가입자 증가 속도를 추정할 수도 있습니다. 외부에 노출되는 식별자는 v4가 맞습니다.
형식이 같아 저장은 문제없지만 정렬 보장이 깨집니다. v7끼리는 시간순이어도 섞인 v4는 무작위 위치에 들어갑니다. 마이그레이션할 때는 정렬에 의존하는 쿼리가 있는지 먼저 확인하세요.