ULID 생성
UUID의 대안으로 사용할 수 있는, 시간순으로 정렬 가능한 ID인 「ULID」를 한 번에 생성합니다.
사용 팁
- ULID는 앞의 10자리가 타임스탬프(생성 시각)이고 나머지 16자리는 무작위 값으로 구성됩니다. 같은 밀리초 내에 생성된 경우가 아니라면, 문자열로 정렬하는 것만으로도 생성 시각 순서대로 나열할 수 있습니다.
- 데이터베이스의 기본 키에 완전히 무작위인 UUID v4를 사용하면 인덱스 삽입 위치가 무작위가 되어 B-tree 인덱스의 단편화가 진행되기 쉽지만, ULID는 시간순으로 정렬되므로 삽입 위치가 대체로 연속적이어서 이 문제를 완화할 수 있습니다.
- ULID는 26자의 Crockford Base32(`0`-`9`, `A`-`Z`에서 혼동하기 쉬운 I·L·O·U를 제외한 32개 문자)로 표현되기 때문에 UUID(하이픈을 포함해 36자)보다 짧고, 대소문자를 구분하지 않는 환경에서도 안전하게 다룰 수 있습니다.
- Nano ID·UUID v4와의 형식 비교는 자매 도구인 Nano ID 생성 페이지에 실린 비교표도 함께 참고해 보세요.
자주 묻는 질문
여담 ― ID의 세계에 「시간순」을 가져온 ULID
ULID 규격은 2016년 Alizain Feerasta에 의해 공개되었습니다. 당시 이미 UUID는 분산 시스템에서 고유 ID를 생성하는 표준적인 수단으로 널리 쓰이고 있었지만, 「완전히 무작위여서 정렬할 수 없다」는 특성이 데이터베이스 인덱스 효율이나 로그의 시계열 분석에서 불편하다는 문제의식에서 탄생했다고 알려져 있습니다.
UUID에도 사실 버전 1(MAC 주소+타임스탬프)이나 2024년에 표준화된 버전 7(타임스탬프+무작위 값의 조합)처럼 시간 정보를 포함하는 변형이 존재합니다. 하지만 ULID는 UUID 규격(RFC 4122)과는 독립적인 별도의 표준으로서, 더 단순한 설계와 Base32를 이용한 간결한 표기를 추구했다는 점에 특징이 있습니다.
오늘날 ULID는 주요 프로그래밍 언어 대부분에 구현 라이브러리가 존재하며, 분산 시스템의 이벤트 ID·로그의 추적 ID·데이터베이스 기본 키 등 생성 순서를 유지하고 싶은 상황에서 널리 채택되고 있습니다. 비슷한 시기에 등장한 UUID v7과 설계 사상이 겹치는 부분도 많아, 두 규격은 「정렬 가능한 UUID 계열 식별자」라는 같은 과제에 대한 서로 다른 접근 방식으로 공존하고 있습니다.