UUID(Universally Unique Identifiers)는 범용 고유 식별자이다. 중앙관리식으로 유일성을 보장하는 방식이 아니다.
UUID는 32개의 16진수로 표시되며 8-4-4-4-12개의 그룹으로 구분되어서 표현된다.
123e4567-e89b-12d3-a456-426614174000
가장 많이 사용되는 것은 1, 4버전이고 4버전이 보다 더 많이 사용된다. 1버전의 경우 Mac address가 있기 때문에 드물지만 보안상의 문제가 생길 수도 있다.
import {v4 as uuidv4} from 'uuid';
let myuuid = uuidv4();
console.out('Your UUID is: ' + myuuid);
// Your UUID is: 8a6e0804-2bd0-4672-b79d-d97027f9071a
ULID Github
자바스크립트 ULID Github
ULID (Universally Unique Lexicographically Sortable Identifier)는 대소문자를 구별하지 않는 시간을 나타내는 10 글자와 16글자의 임의의 값으로 구성되어 있다.
ULID는 생성 순서를 밀리세컨 단위로 기록할 수 있어서, 생성 순서대로 정렬을 할 때 편하다.
만약 같은 밀리세컨드 단위까지 일치하는 시간에 만들어졌고, 여러 컴퓨터에서 사용한다면 순서는 랜덤이 된다.
애초에 ULID는 UUID의 단점을 극복하고자 만들어졌다. (UUID는 타임스탬프 같은 배경 없이 그냥 무작위의 값을 생성해낸다.)
Crockford’s Base32 에 기반해서 만들어졌기 때문에 (I, L, O, U)는 제외된다. (제외되는 이유는 사람 눈에 헷갈리기 때문이다). 또한 ULID는 UUID를 생성하는 것보다 나은 성능을 보이기도 한다.
위의 논리대로라면 1ms에 2^80개까지 만들수 있다는 것이다. 이 글 에서 충돌 가능성에 대해 분석을 해놨다.
또한 충돌가능성에 대비해서 monotonic option을 사용하면 어떤 랜덤한 숫자에서 1씩 증가하면서 충돌을 피하게 할 수도 있다.
import { monotonicFactory } from 'ulid'
const ulid = monotonicFactory()
// Assume that these calls occur within the same millisecond
ulid() // 01BX5ZZKBKACTAV9WEVGEMMVRZ
ulid() // 01BX5ZZKBKACTAV9WEVGEMMVS0
좋은 글 감사합니다. 한 가지 질문 드려요.
ULID (Universally Unique Lexicographically Sortable Identifier)는 대소문자를 구별하지 않는 시간을 나타내는 26자 글자와 16글자의 임의의 값으로 구성되어 있다.
이 부분은 잘못된 부분일까요? https://github.com/ulid/spec 문서에 따르면 ULID는 Timestamp 10자, 랜덤 16자로 총 26자로 표현된다고 나와있어서요.
ttttttttttrrrrrrrrrrrrrrrr
where
t is Timestamp (10 characters)
r is Randomness (16 characters)
오래된 포스팅이지만 혹시 댓글을 보신다면 확인 한번 부탁드릴게요😄
ULID 대해서 가볍게 보고 싶었는데 잘봤습니당
감사해요