ULID 생성기

온라인에서 ULID를 생성해 보세요. 48비트 시간 정보와 80비트 무작위 값으로 구성된 26자의 Crockford Base32 ID입니다.

포맷
생성된 ID
준비되었습니다. 브라우저에서 ULID를 생성해 보세요.

ID 생성 구조

레이아웃
Crockford Base32 문자 26개로 구성되며, 시간 문자 10개 뒤에 무작위 문자 16개가 이어집니다.
엔트로피
48비트 밀리초 타임스탬프 뒤에 80비트의 무작위 데이터가 결합됩니다.
시간 정보
네, 그렇습니다. 처음 10자가 밀리초 단위를 인코딩하므로 사전순 정렬이 곧 시간순 정렬이 됩니다.
충돌 위험
무작위 영역이 80비트이므로, 충돌 위험은 주로 동일한 밀리초(ms) 내에 얼마나 많은 ID를 생성하는지에 달려 있습니다.
예시
01M12BRQ1YMR89JDW2XE43KFN4

ID는 브라우저의 강력한 난수 생성기를 통해 로컬에서 생성됩니다. BroBroGo로 아무것도 전송되지 않습니다.

자주 묻는 질문(FAQ)

ULID는 어떤 용도에 적합한가요?

ULID는 콤팩트하고 URL 친화적이며 텍스트 상태로 시간순 정렬이 가능합니다. 로그, 객체 키, 생성 시간순으로 정렬해야 하는 레코드에 매우 유용합니다.

ULID는 UUID v7과 동일한가요?

아닙니다. 둘 다 밀리초 단위 시간을 포함하지만, ULID는 Crockford Base32 형식을 사용하여 26자로 표현되는 반면, UUID v7은 표준 UUID의 16진수 형태를 유지합니다.

ULID 생성기 페이지 개요

이 페이지는 ULID(Universally Unique Lexicographically Sortable Identifier) 형식의 고유 식별자를 생성하는 전용 도구입니다. 사용자는 생성할 ID 개수(1~100개)를 선택하면 즉시 26자리 문자열 목록을 얻습니다. ULID는 128비트 공간을 사용하며, 첫 10자는 밀리초 단위 타임스탬프, 나머지 16자는 80비트 무작위 성분으로 구성됩니다. 모든 생성은 브라우저 내 crypto.getRandomValues()로 처리되며 서버로 전송되는 데이터는 없습니다.

ULID의 내부 구조와 작동 원리

ULID는 128비트 데이터를 Crockford base32 알파벳으로 인코딩하여 26자의 대소문자 구분 없는 문자열로 표현합니다. 타임스탬프 부분은 48비트(2^48 밀리초, 약 8,925년 표현 가능)로, 밀리초 정밀도로 시간을 기록합니다. 무작위 부분은 80비트로, 각 ID 생성 시마다 브라우저의 암호학적으로 안전한 난수 생성기를 사용해 추출됩니다. Crockford base32는 숫자 0~9와 알파벳 A~Z 중에서 혼동하기 쉬운 I(아이), L(엘), O(오), U(유)를 제외한 문자로 구성되어 있어 사람이 수동으로 전사할 때 오류를 줄여줍니다. 예를 들어 문자 'i'와 'l'이 없으므로 소문자 '1'(일)과의 혼동도 피할 수 있습니다.

타임스탬프와 무작위 성분의 바이트 배치

성분 비트 수 위치 (문자 인덱스)
타임스탬프 48 0~9 (10자)
무작위 80 10~25 (16자)

ULID는 생성 시간 순서대로 정렬할 수 있습니다. 같은 밀리초 내에 생성된 ID는 무작위 성분만 다르므로 엄격한 시간 순서는 보장되지 않지만, 서로 다른 밀리초에서 생성된 ID는 타임스탬프 값의 오름차순으로 정렬됩니다.

다른 ID 형식과의 차이점

UUID v4(36자, 하이픈 포함, 대소문자 구분)와 비교하면 ULID는 10자 더 짧고 하이픈이 없으며 대소문자를 구분하지 않습니다. UUID v7은 타임스탬프를 포함하지만 여전히 36자에 하이픈을 사용합니다. ULID는 모든 문자가 RFC 3986의 비예약 문자에 속하므로 URL에 사용할 때 퍼센트 인코딩이 필요 없습니다. 또한 Crockford base32는 0~9와 A~Z(일부 제외)로 구성되어 사람이 읽고 쓰기에 유리합니다.

속성 ULID UUID v4 UUID v7
문자열 길이 26 36 36
하이픈 없음 있음 (4개) 있음 (4개)
대소문자 구분 없음 있음 있음
타임스탬프 포함 밀리초 (48비트) 없음 밀리초 (48비트)
무작위 비트 수 80 122 74
URL 안전성 모든 문자 안전 일부 문자 인코딩 필요 일부 문자 인코딩 필요

정렬 가능성과 충돌 확률

ULID의 타임스탬프는 밀리초 단위로 증가하므로, 서로 다른 시간에 생성된 ID는 사전순으로 정렬 시 생성 시간순으로 나옵니다. 이 특성은 데이터베이스 B-트리 인덱스 성능에 유리합니다. 무작위 UUID v4는 인덱스에 무작위 삽입을 유발하지만, ULID는 대체로 시간순으로 삽입되므로 인덱스 분할이 줄어듭니다.

동일 밀리초 내에서 충돌 확률은 80비트 무작위 공간(2^80)에 의존합니다. 초당 1,000개(밀리초당 1개) 생성 시 약 1천만 년 후에야 50% 충돌 확률에 도달하는 것으로 알려져 있습니다. 실제 사용에서는 거의 충돌이 발생하지 않습니다. 다만, 매우 높은 생성 속도(예: 밀리초당 수십만 개)에서는 48비트 타임스탬프의 해상도 한계로 인해 무작위 부분만으로 충돌을 피하게 되므로, 동일 밀리초 내에서 생성량이 많을수록 충돌 가능성이 커집니다.

실제 사용 사례와 주의할 점

웹 및 모바일 개발자: URL에 포함하거나 API 응답에 사용할 때 짧고 URL 안전한 식별자가 필요할 때 ULID를 선택합니다. 데이터베이스 관리자는 ULID를 기본 키로 사용하여 인덱스 성능을 향상시킬 수 있습니다. 분산 시스템에서는 각 노드가 자체적으로 타임스탬프를 부여하므로, 노드 간 시간 동기화가 완벽하지 않으면 정렬 순서가 깨질 수 있습니다. 또한 ULID의 타임스탬프는 생성 시간을 노출하므로, 보안이 중요한 환경(예: 사용자 ID)에서는 사용을 피해야 합니다.

이 도구는 최대 100개의 ID를 한 번에 생성할 수 있습니다. 개수 입력을 변경하거나 페이지 옵션을 수정하면 즉시 새 목록으로 교체됩니다. 개별 ID를 클릭하면 클립보드에 복사되며, 전체 목록을 복사하면 "Copied all!" 상태 메시지가 표시됩니다. 하이픈이나 대소문자 변경 옵션은 ULID 형식 자체에 존재하지 않으므로 제공되지 않습니다.

자주 묻는 질문

Q: ULID는 몇 비트인가요?
128비트입니다. 48비트 타임스탬프와 80비트 무작위 부분으로 나뉩니다.

Q: ULID와 UUID v4 중 어떤 것이 더 안전한가요?
무작위성 측면에서 UUID v4는 122비트, ULID는 80비트의 무작위 성분을 가지므로 UUID v4가 더 높은 충돌 저항성을 제공합니다. 하지만 대부분의 일반적인 사용에서는 ULID의 80비트도 충분히 안전합니다.

Q: ULID는 대소문자를 구분하나요?
아니요. Crockford base32 알파벳은 대문자와 소문자를 동일하게 취급하므로, "ABC"와 "abc"는 같은 ID로 간주됩니다. 도구는 항상 대문자로 출력합니다.

Q: 같은 밀리초 내에 여러 개의 ULID를 생성하면 정렬 순서가 보장되나요?
아니요. 같은 밀리초 내에서는 무작위 성분에 따라 정렬되므로 생성 순서와 정렬 순서가 다를 수 있습니다. 서로 다른 밀리초에 생성된 ID만 타임스탬프 순으로 정렬됩니다.

Q: ULID는 어디에서 생성되나요?
이 페이지에서는 모든 생성이 사용자 브라우저에서 이루어집니다. 서버로 전송되는 데이터는 없으며, 브라우저의 crypto.getRandomValues() 함수를 사용하여 안전한 난수를 생성합니다.

Q: ULID의 타임스탬프로 생성 시간을 알 수 있나요?
네, 첫 10자를 디코딩하면 밀리초 단위의 유닉스 타임스탬프를 얻을 수 있습니다. 따라서 ULID만으로도 ID가 생성된 시간을 추정할 수 있습니다.