ULID 생성기
UUID 를 대신할 수 있는 26글자 식별자를 만듭니다. 앞부분이 만든 시각이라 문자열 정렬만으로 생성 순서가 나옵니다. 데이터베이스 기본키로 쓸 때 인덱스가 흩어지지 않습니다.
만들기
ULID 에서 시각 읽기
ULID 생성기는 UUID 를 대신할 수 있는 26글자 식별자를 만듭니다. 앞 10글자가 만든 시각이라 문자열 정렬만으로 생성 순서가 나옵니다. 데이터베이스 기본키로 쓸 때 인덱스가 흩어지지 않는 것이 UUID 대비 가장 큰 장점입니다.
ULID생성 사용 방법
- 개수를 정하고 다시 만들기를 누릅니다.
- 같은 밀리초 안에서도 순서를 지킬지 고릅니다. 켜 두는 편이 안전합니다.
- 복사하거나 .txt 로 내려받습니다.
- 아래 칸에 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바이트 이진값으로 바꿔 저장할 수도 있습니다.