ULID 생성기

UUID 를 대신할 수 있는 26글자 식별자를 만듭니다. 앞부분이 만든 시각이라 문자열 정렬만으로 생성 순서가 나옵니다. 데이터베이스 기본키로 쓸 때 인덱스가 흩어지지 않습니다.

만들기

ULID 에서 시각 읽기

ULID 생성기는 UUID 를 대신할 수 있는 26글자 식별자를 만듭니다. 앞 10글자가 만든 시각이라 문자열 정렬만으로 생성 순서가 나옵니다. 데이터베이스 기본키로 쓸 때 인덱스가 흩어지지 않는 것이 UUID 대비 가장 큰 장점입니다.

ULID생성 사용 방법

  1. 개수를 정하고 다시 만들기를 누릅니다.
  2. 같은 밀리초 안에서도 순서를 지킬지 고릅니다. 켜 두는 편이 안전합니다.
  3. 복사하거나 .txt 로 내려받습니다.
  4. 아래 칸에 ULID 를 붙여 넣으면 언제 만들어졌는지 알려 줍니다.

지원 형식과 입력 조건

형식
26글자 (시각 10 + 무작위 16). Crockford Base32
쓰이는 글자
0-9 와 A-Z 중 I · L · O · U 를 뺀 32글자 (눈으로 헷갈리지 않게)
난수
crypto.getRandomValues — 암호학적으로 안전한 난수
한 번에
최대 1000개

UUID 와 무엇이 다른가요

  • UUIDv4 는 전체가 무작위라 정렬해도 순서가 없습니다. 기본키로 쓰면 새 행이 인덱스 여기저기에 흩어져 삽입 성능이 떨어집니다.
  • ULID 는 앞부분이 시각이라 새로 만든 값이 항상 뒤에 붙습니다. 인덱스가 한쪽으로 자랍니다.
  • 26글자로 UUID(36글자)보다 짧고, 하이픈이 없어 URL 에 그대로 쓸 수 있습니다.
  • 대신 **만든 시각이 값에 드러납니다.** 가입 시각이나 주문 시각을 감춰야 한다면 적합하지 않습니다.

같은 밀리초 안에서의 순서

  • 1밀리초 안에 여러 개를 만들면 시각 부분이 같아집니다. 이때 무작위 부분만 다르면 순서가 뒤섞입니다.
  • 규격은 이 경우 직전 값의 무작위 부분을 1 증가시키도록 정하고 있습니다. 이 도구는 그대로 따릅니다.
  • 켜 두면 한 번에 만든 목록이 언제나 생성 순서대로 정렬됩니다. 실제로 200개를 만들어 확인했습니다.

왜 I, L, O, U 가 없나요

  • I 와 1, O 와 0 은 눈으로 구분하기 어렵습니다. 전화로 불러 주거나 손으로 옮겨 적을 때 실수가 납니다.
  • U 는 뺀 이유가 다릅니다 — 무작위 조합에서 뜻하지 않은 욕설이 만들어지는 것을 줄이기 위해서입니다.
  • 이 방식을 Crockford Base32 라고 하며 ULID 규격이 채택하고 있습니다.

자주 묻는 질문

값이 겹칠 수 있나요?

같은 밀리초에 무작위 16자리가 모두 같아야 하므로 현실적으로 일어나지 않습니다. 순서 지키기를 켜면 같은 밀리초 안에서도 겹치지 않습니다.

만든 시각을 감출 수 있나요?

없습니다. 시각이 값에 들어 있는 것이 ULID 의 특징입니다. 감춰야 한다면 UUIDv4 를 쓰세요.

데이터베이스에 어떻게 저장하나요?

CHAR(26) 으로 저장하는 것이 가장 간단합니다. 공간을 아끼려면 16바이트 이진값으로 바꿔 저장할 수도 있습니다.