UUID v7 타임스탬프 추출

UUID v7 문자열을 붙여넣기만 하면 앞쪽 48비트에 담긴 밀리초 단위 타임스탬프를 추출해 UTC 날짜와 시간으로 복원합니다. v7이 아닌 버전이나 variant 이상도 감지하며, 자매 도구인 "UUID v7 생성"의 역변환으로 사용할 수 있습니다.

UUID v7의 비트 레이아웃

비트 범위 필드 설명
0-47 unix_ts_ms Unix 에포크로부터의 밀리초를 빅엔디안으로 저장. 이 도구가 추출하는 값입니다.
48-51 version UUID의 버전 번호. v7의 경우 0111(16진수로 7)로 고정됩니다.
52-63 rand_a 12비트의 무작위 값. 일부 구현에서는 동일 밀리초 내 순서 보존에 사용합니다.
64-65 variant RFC 4122/9562의 variant를 나타내는 고정값 10. 16진수로는 첫 자리가 8/9/a/b가 됩니다.
66-127 rand_b 충돌 방지를 위한 엔트로피를 제공하는 62비트의 무작위 값.

UUID v7의 타임스탬프 추출이란

UUID v7은 2024년 RFC 9562로 표준화된 새 판으로, 앞 48비트에 「생성한 시각」이 밀리초 단위의 Unix 타임스탬프로 들어 있습니다. 그래서 정렬하면 생성 순서대로 놓이고, 데이터베이스의 기본 키로 써도 인덱스가 잘 조각나지 않는다는 장점이 있습니다. 이 도구는 UUID 문자열을 붙여 넣기만 하면 그 앞 48비트를 꺼내 UTC 날짜·시각으로 되돌려 줍니다.

판(version)과 variant도 함께 판정합니다. v7이 아닌 UUID를 넣어도 타임스탬프 계산 자체는 수행하고 「이것은 v7이 아니다」라는 경고를 덧붙여 보여 줍니다. v4처럼 무작위인 UUID에서는 의미 없는 날짜가 나오지만, 어떤 UUID에 어떤 정보가 들어 있는지 확인하는 용도로는 도움이 됩니다. 비트 배치 표도 함께 보여 주므로 앞 48비트 뒤에 무엇이 들어가는지까지 확인할 수 있습니다. 모든 처리는 브라우저 안에서 끝납니다.

UUID에서 타임스탬프를 꺼내는 순서

  1. UUID를 붙여 넣습니다 8-4-4-4-12의 하이픈 구분 36자 형식으로 입력합니다. 대소문자는 가리지 않습니다.
  2. 판과 variant를 확인합니다 v7이라면 경고가 나오지 않습니다. v7이 아니면 「v7이 아니다」라는 경고가 표시됩니다.
  3. 되돌린 일시를 읽습니다 Unix 밀리초·ISO 8601(UTC)·사용 중인 기기의 현지 시각의 세 가지 형태로 표시됩니다.
  4. 비트 배치 표로 구조를 봅니다 앞 48비트의 타임스탬프에 이어 판·variant·난수가 어느 비트에 들어가는지 확인할 수 있습니다.

더 잘 활용하기 위한 팁

  • 모든 해독 처리는 브라우저 내 JavaScript에서 완전히 이루어지며, 입력한 UUID가 toolbase.cc 서버로 전송되는 일은 없습니다.
  • 데이터베이스 기본 키에 UUID v7을 사용한다면, 별도의 created_at 컬럼이 없어도 키를 여기에 붙여넣기만 하면 해당 레코드의 생성 시각을 복원할 수 있습니다.
  • v7이 아닌 UUID(예: v4)를 입력하면 경고가 표시되지만, 앞쪽 48비트에서 기계적으로 추출한 참고값은 계속 표시되므로 형식 차이를 학습하는 용도로도 활용할 수 있습니다.
  • UUID를 생성해야 한다면 자매 도구인 "UUID v7 생성"을 사용하세요. 이 도구로 바로 역변환할 수 있는 형식의 UUID를 생성합니다.
  • 로그 파일이나 API 응답에 포함된 UUID v7을 하나씩 붙여넣으면 디버깅 중 외부 시스템에서 이벤트가 발생한 시각을 추정하는 데도 활용할 수 있습니다.

이런 때에 쓸 수 있습니다

로그에 남은 UUID에서 발생 시각을 알아낼 때

시각 칼럼이 없는 로그라도 기본 키가 v7이라면 거기서 생성 시각을 되살릴 수 있습니다. 장애 조사에서 앞뒤 관계를 쫓을 때 효과적입니다.

기본 키가 생성 순서대로인지 확인할 때

여러 레코드의 UUID를 차례로 넣어 보면, 정말로 시간 순서가 되는 구현인지 확인할 수 있습니다.

v7을 채택할지 검토할 때

실제로 값을 넣어 무엇이 꺼내지는지 보면 「시각을 외부에서 읽을 수 있다」는 성질의 의미를 알 수 있습니다. 그 시각이 민감한 정보라면 이 성질은 단점이 됩니다.

어느 판의 UUID인지 가릴 때

받은 UUID가 v4인지 v7인지는 눈으로 가리기 어려운데, 즉시 판정할 수 있습니다.

UUID 용어

UUID v7
RFC 9562로 표준화된 판으로, 앞 48비트에 Unix 밀리초 타임스탬프를 가집니다. 시간순으로 정렬된다는 점이 v4와의 가장 큰 차이입니다.
version(판)
13번째 16진수 자리에 들어가는 숫자로, UUID의 생성 방식을 나타냅니다. v7이면 이 자리가 7입니다.
variant
판과는 별개로 UUID의 내부 배치를 나타내는 값입니다. RFC 9562를 따르는 UUID에서는 17번째 자리가 8·9·a·b 중 하나입니다.
Unix 밀리초
1970년 1월 1일 00:00:00 UTC부터 지난 밀리초 수입니다. 48비트면 서기 10889년까지 나타낼 수 있습니다.
UUID v4와의 차이
v4는 전체가 거의 난수이며 **생성 시각의 정보를 전혀 가지지 않습니다.** 그래서 정렬해도 생성 순서가 되지 않지만, 대신 시각을 외부에서 읽을 수 없습니다.

자주 묻는 질문

UUID v7은 RFC 9562로 표준화되어 있으며, 128비트 중 앞쪽 48비트에 밀리초 단위 Unix 타임스탬프가 빅엔디안 순서로 고정 삽입되어 있습니다. 따라서 앞쪽 16진수 12자리를 숫자로 변환해 밀리초로 해석하기만 하면 생성 시각을 복원할 수 있습니다.

UUID v4는 완전히 무작위 값이므로, 여기서 추출한 "타임스탬프"는 실제 생성 시각과 무관한 의미 없는 숫자가 됩니다. 이 도구는 버전 자리를 검사해 경고를 표시하지만, 참고를 위해 앞쪽 48비트에서 기계적으로 추출한 값 자체는 계속 표시합니다.

UUID v7 사양상 정밀도는 밀리초 단위입니다. 동일한 밀리초 내에 여러 UUID v7이 생성되면 앞쪽 48비트 값은 동일해지며, 그 생성 순서까지는 복원할 수 없고 구분은 전적으로 rand_a·rand_b의 무작위 값에 맡겨집니다.

RFC 4122/9562를 준수하는 UUID는 4번째 그룹의 첫 16진수 자리가 8·9·a·b 중 하나여야 합니다. 이 값이 그 외(0-7 또는 c-f)라면 독자적인 ID 생성 로직이거나 비트가 손상되었을 가능성이 있어 경고를 표시합니다.
툴군

여담 ― UUID에 "시계"를 내장한다는 것

UUID v7이 획기적인 이유는 식별자 자체가 생성 시각이라는 정보를 영구적으로 담고 있다는 점입니다. 기존 UUID v4에서는 레코드가 언제 생성되었는지 알려면 별도의 created_at 컬럼이 반드시 필요했지만, 테이블의 기본 키에 UUID v7을 사용한다면 ID 문자열만으로 생성 시각을 기계적으로 복원할 수 있습니다. 이 도구는 자매 도구인 "UUID v7 생성"의 역변환으로서 그 복원 과정을 제공합니다.

이러한 특성은 장애 조사나 데이터 마이그레이션 현장에서 특히 유용합니다. 예를 들어 오래된 로그에 남은 주문 ID나 외부 시스템에서 받은 이벤트 ID가 UUID v7 형식이라면, 전용 타임스탬프 컬럼을 참조하지 않고도 "이 레코드가 대략 언제 생성되었는지"를 즉시 확인할 수 있습니다. created_at 컬럼이 없는 구형 시스템 조사나, 다른 회사가 발급한 UUID v7 분석에도 응용할 수 있습니다.

다만 주의할 점도 있습니다. UUID v7의 타임스탬프는 어디까지나 생성 측의 시계에 의존하므로, 생성 서버의 시각이 어긋나 있으면 추출 결과도 어긋납니다. 또한 이 도구는 UUID v4 같은 다른 버전의 값에서도 "타임스탬프처럼 보이는 값"을 기계적으로 추출해 버리는데, 이는 어디까지나 비트 위치를 해석한 것일 뿐 의미 있는 값임을 보장하지 않는다는 점을 염두에 두고 사용하시기 바랍니다.