무료 ULID 생성기 — ULID 생성 및 디코드
ULID를 온라인에서 생성·디코드·변환하세요. 무료, 100% 브라우저 실행. 내장 타임스탬프 추출, ULID↔UUID 변환, 일괄 생성, 단조 모드 지원. 서버 전송 없음.
각 ULID는 새로운 80비트 무작위 값을 씁니다.
ULID와 UUID는 둘 다 128비트이므로 변환은 무손실이며 가역적입니다. 고전적 UUID가 필요한가요? UUID 생성기를 사용하세요.
ULID란 무엇인가요?
ULID — Universally Unique Lexicographically Sortable Identifier — 는 무작위 UUIDv4의 현실적 약점을 고치되 그 최고의 장점은 그대로 둔 128비트 식별자입니다. 중앙 조정자 없이 어디서든 하나를 생성하고도 고유성을 확신할 수 있다는 점이죠. 차이는 ULID가 시간 순으로 정렬 가능하다는 것입니다. ULID는 Crockford Base32 26자로 렌더링되며 두 부분으로 나뉩니다. 앞 10자는 Unix 에폭 이후 밀리초를 세는 48비트 타임스탬프이고, 뒤 16자는 암호학적으로 안전한 80비트 무작위 값입니다. 시간을 맨 앞에 두고 순서를 보존하는 알파벳으로 인코딩하면, 식별자가 평범한 문자열로 시간 순 정렬됩니다.
그 단 하나의 설계 선택이 데이터베이스에 큰 영향을 미칩니다. 무작위 UUIDv4 기본 키는 삽입할 때마다 B-트리 인덱스의 예측 불가능한 자리에 안착해 인덱스를 단편화하고, 캐시를 휘젓고, 테이블이 커질수록 쓰기 성능을 서서히 떨어뜨립니다. ULID는 시간 접두부를 가지므로 매번 인덱스 끝부분 또는 그 근처에 안착합니다 — 삽입이 순차적으로 유지되고, 인덱스가 간결하며, 시간 구간에 대한 범위 스캔이 저렴해집니다. UUID의 조정 없는 생성과, 자동 증가 정수의 삽입 지역성을 함께 얻으면서도 추측 가능한 순차 카운터를 노출하지 않습니다.
인코딩 세부는 의도적입니다. Crockford Base32는 I, L, O, U 글자를 제외하는데, 숫자 1·0과의 시각적 혼동을 피하고 입력 시 문자열을 대소문자 무관으로 처리하기 위해서입니다. 그 결과 하이픈 없는 26자가 되어 이스케이프 없이 URL, 파일명, 요청 헤더에 넣어도 안전하며 — UUID의 36자 하이픈 형식보다 눈에 띄게 짧습니다. 48비트 타임스탬프는 오랫동안 고갈되지 않습니다. 밀리초 카운터가 넘치기 전 year 10889까지의 날짜를 표현할 수 있습니다.
ULID가 모든 일에 맞는 도구는 아닙니다. 내장 타임스탬프는 레코드가 언제 만들어졌는지 드러내는데, 디버깅과 정렬에는 기능이지만 그것을 노출하고 싶지 않다면 작은 정보 누출입니다. 그리고 스택이 UUID 타입에 묶여 있다면, 같은 시간 접두부 아이디어를 표준 UUID 형식 안에 적용한 UUIDv7을 선호할 수 있습니다. 하지만 어떤 노드에서든 만들고 타임스탬프를 다시 읽어낼 수 있는, 짧고 URL 안전하며 정렬 가능한 식별자를 원한다면 ULID는 훌륭한 기본값입니다 — 그리고 단지 128비트이므로, 이 도구의 변환 탭으로 언제든 UUID와 오갈 수 있습니다.
// Browser / Node with the `ulid` package
import { ulid, decodeTime } from 'ulid';
const id = ulid(); // e.g. 01KVT0F720ZK9N4T2QX7VR8WMC
const ts = decodeTime(id); // 1782210600000 -> 2026-06-23T10:30:00.000Z
// Monotonic factory: strictly increasing within the same millisecond
import { monotonicFactory } from 'ulid';
const next = monotonicFactory();
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMC
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WMD
next(1782210600000); // 01KVT0F720ZK9N4T2QX7VR8WME 주요 기능
한 페이지에서 생성·디코드·변환
세 개의 탭이 ULID 전체 워크플로를 아우릅니다. 새 ULID를 만들고, 기존 ULID를 디코드해 타임스탬프를 읽고, ULID와 UUID 사이를 무손실 변환하세요. 경쟁 도구 대부분은 첫 번째만 하지만, 여기서는 왕복 전체가 한 페이지에 있습니다.
타임스탬프 디코더
ULID를 붙여 넣고 그것이 만들어진 정확한 밀리초를 읽으세요 — UTC로, 현지 시간으로, 원시 Unix 밀리초로 — 80비트 무작위 구간과 함께요. 어떤 식별자가 언제 만들어졌는지 데이터베이스 조회 없이 감사하세요.
무손실 ULID ↔ UUID 변환
ULID와 UUID는 둘 다 128비트이므로 변환이 정확하고 가역적입니다. 변환 탭은 붙여 넣은 형식을 자동 감지해 다른 형식을 만들어, 단 한 비트도 잃지 않고 정렬 가능한 ULID와 UUID 타입 열·API 사이를 잇게 해 줍니다.
단조 모드
같은 밀리초에 만든 ID에도 엄격한 순서가 필요한가요? 단조 모드는 무작위 값을 증가시켜 각 ULID가 직전 값보다 크도록 보장하므로, 빠듯한 삽입 루프가 완벽하게 정렬된 채로 유지됩니다.
일괄 생성
한 번에 최대 50개의 ULID를 만들고 모두 복사로 전체를 가져오세요. 테스트 픽스처 시드, 대량 삽입, 조회 테이블 채우기에 이상적이며 — 쉰 번 클릭할 필요가 없습니다.
사용자 지정 타임스탬프
지금이 아닌 특정 순간을 내장하세요 — 결정적 테스트 데이터나, 마이그레이션에서 정렬 가능 속성을 보존하며 레코드를 소급 날짜로 기록하는 데 유용합니다.
암호학적으로 안전한 무작위성
80개 무작위 비트는 브라우저의 CSPRNG인 crypto.getRandomValues에서 옵니다 — Math.random은 절대 쓰지 않습니다 — 그래서 각 ULID는 예측 불가능하고 같은 밀리초 충돌은 극도로 일어나기 어렵습니다.
100% 비공개, 브라우저 전용
모든 ULID는 전적으로 사용자 기기에서 생성·디코드·변환됩니다. 네트워크 요청도, 로깅도, 저장도 없습니다 — 개발자 도구 → 네트워크에서 직접 확인하세요. 식별자는 제3자에게 절대 닿지 않습니다.
ULID 예시
ULID 한 개 생성
Mode: Standard · Quantity: 1
01KVT0F720ZK9N4T2QX7VR8WMC
ULID는 Crockford Base32 26자입니다. 앞 10자는 48비트 밀리초 타임스탬프를, 뒤 16자는 crypto.getRandomValues에서 뽑은 암호학적으로 안전한 80비트 무작위 값을 인코딩합니다. 타임스탬프가 맨 앞에 오고 Base32가 바이트 순서를 보존하므로, 나중에 생성된 ULID는 일반 문자열로 비교해도 항상 먼저 생성된 것 뒤로 정렬됩니다 — 별도 인덱스가 필요 없습니다. 복사를 클릭해 값을 가져오고, 새 값을 원하면 생성을 다시 클릭하세요.
ULID를 디코드해 타임스탬프 읽기
01ARYZ6S41TSV4RRFFQ69G5FAV
Timestamp (UTC): 2016-07-30T22:36:16.385Z · Randomness: TSV4RRFFQ69G5FAV
디코드는 앞 10자를 생성 시점에 내장된 48비트 밀리초 값으로 되돌립니다 — 여기서는 1469918176385 ms이며 2016-07-30T22:36:16.385Z입니다. 이는 ULID 명세의 표준 예시입니다. 디코드 탭은 타임스탬프를 UTC와 현지 시간으로, 원시 Unix 밀리초로, 그리고 80비트 무작위 구간으로 보여 주므로, 어떤 식별자가 언제 만들어졌는지 데이터베이스 조회 없이 정확히 감사할 수 있습니다.
ULID를 UUID로 변환
01KVT0F720ZK9N4T2QX7VR8WMC
019ef407-9c40-fcd3-5268-57e9f784728c
ULID와 UUID는 둘 다 정확히 128비트이므로 변환은 무손실이며 완전히 가역적입니다 — 같은 비트를 Crockford Base32에서 하이픈 16진수로 다시 인코딩할 뿐입니다. 변환 탭은 붙여 넣은 것이 ULID인지 UUID인지 자동으로 감지해 다른 형식으로 바꿉니다. 덕분에 ULID를 UUID 열에 저장하거나 UUID만 받는 시스템에 ULID를 건넨 뒤, 정렬 가능한 문자열이 다시 필요할 때 되돌릴 수 있습니다.
단조 ULID 일괄 생성
Mode: Monotonic · Quantity: 3 (same millisecond)
01KVT0F720ZK9N4T2QX7VR8WMC 01KVT0F720ZK9N4T2QX7VR8WMD 01KVT0F720ZK9N4T2QX7VR8WME
같은 밀리초 안에서 여러 ID가 만들어지면, 일반 ULID는 10자 시간 접두부를 공유하지만 무작위 꼬리는 순서가 정해지지 않습니다. 단조 모드가 이를 바로잡습니다. 한 밀리초 안에서 이전 무작위 값에 1을 더하므로 각 ULID가 직전 값보다 엄격히 크고, 일괄 묶음이 완벽하게 정렬된 채로 유지됩니다. 세 값이 마지막 문자(C, D, E)에서만 다른 것을 보세요 — 밀리초 미만의 속도에서도 순서가 유지되어야 하는 고처리량 삽입에 이상적입니다.
특정 날짜로 ULID 생성
Custom time: 2026-06-23 10:30:00 UTC
01KVT0F720… (time component 01KVT0F720)
사용자 지정 타임스탬프를 설정하면 생성기가 지금이 아니라 바로 그 순간을 내장하며, 무작위 부분은 여전히 안전한 RNG로 채웁니다. 2026-06-23T10:30:00.000Z의 10자 시간 구성요소는 01KVT0F720입니다. 결정적이고 시간 순으로 정렬된 식별자로 테스트 픽스처를 시드할 때, 또는 마이그레이션에서 레코드를 소급 날짜로 기록하면서 정렬 가능 속성을 그대로 유지할 때 유용합니다.
ULID 생성기 사용법
- 1
생성 모드 고르기
표준 모드는 각 ULID에 새로운 80비트 무작위 값을 줍니다. 단조 모드는 같은 밀리초 안에서 만든 ULID가 엄격히 증가하도록 보장합니다 — 밀리초 미만의 속도에서도 순서가 유지되어야 하는 고처리량 삽입에 고르세요.
- 2
수량·대소문자, 그리고 (선택) 사용자 지정 시간 설정
한 번에 1개부터 50개까지 ULID를 생성하세요. 출력은 기본적으로 대문자 — 표준 ULID 형식 — 이며 소문자로 전환할 수 있습니다. 시간을 비워 두면 지금으로 찍히고, 사용자 지정 타임스탬프를 설정하면 픽스처나 소급 기록 레코드를 위해 특정 순간을 내장합니다.
- 3
생성하고 복사하기
ULID 생성을 클릭하세요. 단일 값에는 복사를, 또는 모두 복사로 묶음 전체를 줄바꿈으로 구분된 텍스트로 가져와 코드, 시드 파일, 스프레드시트에 바로 붙여 넣으세요.
- 4
ULID를 디코드해 타임스탬프 읽기
디코드 탭에서 ULID를 붙여 넣어 48비트 생성 타임스탬프를 UTC와 현지 시간으로, 원시 Unix 밀리초로, 80비트 무작위 값으로 추출하세요 — 전적으로 브라우저 안에서, 조회가 필요 없습니다.
- 5
ULID와 UUID 사이 변환
ULID ↔ UUID 탭에서 ULID나 UUID를 붙여 넣으면 도구가 입력을 자동으로 감지해 다른 형식으로 무손실 변환합니다. ULID를 UUID 열에 저장하거나, UUID만 받는 시스템에 ULID를 건넨 뒤 정렬 가능한 문자열이 필요할 때 되돌리세요.
Common Errors
같은 밀리초의 ULID를 정렬된 것으로 취급
한 밀리초 안에서 만든 일반 ULID는 시간 접두부를 공유하지만 무작위 꼬리는 순서가 없어 상대 순서가 정의되지 않습니다. 그 속도에서 엄격한 순서에 의존한다면 단조 모드를 쓰세요.
Standard mode, 3 IDs in one ms → order within the ms is random
Monotonic mode, 3 IDs in one ms → …WMC < …WMD < …WME
변환된 ULID가 유효한 UUIDv4이길 기대
ULID를 UUID 형식으로 변환하면 같은 128비트를 다시 인코딩할 뿐, UUID 버전·변형 필드를 설정하지 않습니다. 결과는 유효한 128비트 UUID 문자열이지만, 라이브러리가 그 비트를 검사하면 버전 4나 7로 보고되지 않습니다.
uuid.version(ulidToUuid(id)) → not 4 (bits are the ULID's)
Treat it as an opaque 128-bit value, or generate a real UUIDv7 instead
ULID에 소문자 i, l, o를 손으로 입력
Crockford Base32는 I, L, O, U를 제외합니다. 디코더는 I·L을 1로, O를 0으로 매핑하지만, 그 글자를 ULID에 손으로 입력하는 것은 오류가 잦습니다. ULID는 다시 입력하지 말고 복사하세요.
01ARYZ6S41TSV4RRFFQ69G5FAO → ambiguous O
01ARYZ6S41TSV4RRFFQ69G5FAV → canonical characters only
ULID는 어디에 쓰나
- 정렬 상태를 유지하는 데이터베이스 기본 키
- ULID를 기본 키로 써서 UUID의 조정 없는 생성과 자동 증가 정수의 삽입 지역성을 함께 얻으세요. 시간 접두부를 가지므로 새 행이 UUIDv4처럼 흩어지는 대신 B-트리 인덱스 끝부분 근처에 추가되어, 테이블이 커져도 삽입이 빠르고 인덱스가 간결하게 유지됩니다.
- 중앙 시퀀스 없는 분산 시스템
- 서비스, 엣지 워커, 클라이언트 등 어떤 노드에서도 공유 카운터나 충돌 조정 없이 식별자를 생성하면서, 사후에 모든 것을 생성 시간 순으로 정렬할 수 있습니다. ULID는 마이크로서비스에 데이터베이스 왕복으로 할당할 필요 없는 고유하고 순서 있는 키를 줍니다.
- 이벤트 로그와 메시지 ID
- 이벤트, 로그 라인, 큐 메시지에 단조 ULID로 도장을 찍어, 같은 밀리초 안에서 많이 생성되어도 엄격한 시간 순을 유지하세요. 시간 구간을 범위 스캔하는 것이 단순한 문자열 비교가 됩니다.
- URL 안전 공개 식별자
- ULID는 하이픈 없는 26자에 URL 안전 알파벳이라, 이스케이프 없이 경로, 파일명, 헤더에 들어가며 36자 UUID보다 짧습니다. 나중에 내장 타임스탬프를 디코드해 리소스가 언제 만들어졌는지 확인하세요.
- UUID 전용 시스템으로의 다리
- UUID만 받는 데이터베이스 열이나 API로 작업하나요? 정렬 가능한 ULID를 생성하고, 저장이나 전송을 위해 UUID 형식으로 변환한 뒤, 간결한 정렬 가능 문자열이 필요할 때 되돌리세요 — 128비트 값이 양방향에서 정확히 보존됩니다.
- 결정적 테스트 픽스처
- 사용자 지정 시간 옵션으로 선택한 타임스탬프의 ULID로 테스트를 시드하면, 픽스처가 재현 가능하고 이미 시간 순으로 정렬됩니다. 어서션에서 디코드해 코드가 기록한 생성 시간을 검증하세요.
ULID 작동 원리
- 128비트 레이아웃: 48비트 시간 + 80비트 무작위
- ULID는 정확히 128비트입니다. 상위 48비트는 밀리초 Unix 타임스탬프, 하위 80비트는 무작위입니다. Crockford Base32로 문자당 5비트로 인코딩하면 시간에 10자, 무작위에 16자 — 총 26자입니다. 48비트가 최상위 5비트 그룹을 다 채우지 못하므로 첫 문자는 항상 7 이하입니다.
- Crockford Base32 인코딩
- ULID는 Crockford Base32 알파벳(0–9와, I·L·O·U를 제외한 A–Z)을 씁니다. 그 네 글자를 빼면 숫자 1·0과의 혼동을 피하고, 디코더가 입력 시 I·L을 1로, O를 0으로 매핑해 문자열을 대소문자 무관으로 다룰 수 있습니다. 알파벳에 순서가 있어, 바로 이것이 인코딩된 문자열이 바탕 비트와 같은 방식으로 정렬되게 합니다.
- 사전식 정렬 가능성
- 타임스탬프가 가장 중요한 구성요소이고 Base32 알파벳이 순서를 보존하므로, 두 ULID를 문자열로 비교한 결과는 그 128비트 값을 비교한 결과와 같고, 이는 다시 생성 시간을 비교한 결과와 같습니다. 바로 이것이 평범한 ORDER BY나 배열 정렬로 추가 인덱스 없이 시간 순을 만들어 냅니다.
- 밀리초 안의 단조성
- ULID 명세의 단조 옵션은 같은 밀리초에 만든 ID의 순서를 안정적으로 유지합니다. 한 밀리초의 첫 ID 무작위 값은 정상적으로 생성되고, 그 밀리초의 이후 각 ID는 이전 무작위 값에 1을 더한 것입니다. 이 도구는 80비트 무작위 값을 빅엔디언 정수로 증가시켜 이를 구현합니다.
- crypto.getRandomValues를 통한 안전한 무작위성
- 80개 무작위 비트는 Math.random이 아니라 Web Crypto CSPRNG인 crypto.getRandomValues로 채워집니다. 80비트 엔트로피라면 같은 밀리초에 수백만 개의 ULID를 생성해도 충돌 확률은 무시할 만큼 작게 유지됩니다.
- ULID ↔ UUID는 순수한 재인코딩
- ULID와 UUID 사이 변환은 비트를 전혀 바꾸지 않습니다 — 같은 128비트를 Crockford Base32에서 하이픈 16진수로, 또는 그 반대로 다시 인코딩할 뿐입니다. 그래서 왕복이 정확합니다. UUID로 변환했다가 되돌린 ULID는 원본과 바이트 단위로 동일합니다. 다만 ULID의 바이트는 UUID 버전·변형 필드를 설정하지 않으므로, 결과 UUID는 유효한 128비트 값이지만 버전 태그가 붙은 UUIDv4나 v7은 아닙니다.
ULID 모범 사례
- 고처리량 삽입에는 단조 모드 사용
- 시스템이 밀리초당 한 개를 넘는 식별자를 만들 수 있고 순서에 의존한다면 단조 ULID를 생성하세요. 일반 ULID는 한 밀리초 안에서 순서가 없지만, 단조 ULID는 엄격히 증가하므로 아무리 빨리 만들어도 묶음이 정렬된 채로 유지됩니다.
- ULID를 간결하게 저장하기
- ULID는 128비트입니다 — 공간과 인덱스 크기가 중요하면 26자 텍스트 필드가 아니라 16바이너리 바이트나 UUID 타입 열로 저장하세요. Base32 문자열로는 사람이나 URL이 보는 가장자리에서만 변환하세요. 이 도구의 변환 탭이 저장용 UUID 형식을 줍니다.
- 타임스탬프가 보인다는 점 기억하기
- ULID는 그것을 읽을 수 있는 누구에게나 생성 시간을 드러냅니다. 디버깅과 정렬에는 좋지만, 생성 시간 노출이 걱정된다면 — 가령 공개용 식별자라면 — 그 누출을 따져 보거나, 순서가 중요하지 않은 곳에서는 완전히 무작위인 UUIDv4를 쓰세요.
- 항상 CSPRNG로 생성하기
- 고유성 보장은 80개 무작위 비트가 예측 불가능하다는 데 달려 있습니다. 이 도구처럼 crypto.getRandomValues 같은 암호학적으로 안전한 소스를 쓰세요 — 예측 가능성 때문에 식별자가 충돌하거나 추측될 수 있는 Math.random은 절대 쓰지 마세요.
- ULID와 UUIDv7을 의식적으로 고르기
- 둘 다 시간 정렬 128비트 ID를 줍니다. 가장 짧은 URL 안전 문자열을 원하면 ULID를, 버전·변형 비트가 있는 표준 UUID 형식에 머물러야 하면 UUIDv7을 고르세요. 시스템마다 하나로 표준화하고, 경계를 넘어야 할 때 변환 탭을 쓰세요.
ULID — 자주 묻는 질문
ULID란 무엇인가요?
ULID와 UUID — 무엇을 써야 하나요?
ULID는 정렬 가능한가요?
ULID의 타임스탬프는 어떻게 디코드하나요?
단조 ULID란 무엇인가요?
이 ULID 생성기는 안전하고 비공개인가요?
ULID와 UUIDv7의 차이는 무엇인가요?
관련 도구
모든 도구 보기 →Bcrypt 해시 생성 및 검증 도구
보안 도구
온라인으로 bcrypt 비밀번호 해시를 생성·검증하세요 — 조절 가능한 비용 인자, $2b$/$2a$/$2y$ 접두사 지원. 100% 브라우저에서 실행, 비밀번호는 업로드되지 않습니다.
JWT 디코더 (JWT Decoder)
보안 도구
무료 JWT 디코더로 JWT 토큰을 온라인에서 즉시 디코딩. 헤더, 페이로드, 서명, 만료, 클레임 확인. 100% 브라우저 기반 — 토큰이 기기를 떠나지 않음. 가입·추적 없음.
JWT 인코더 (JWT Encoder)
보안 도구
무료 온라인 JWT 생성기·인코더. 헤더와 페이로드를 구성하고 HS256, RS256, ES256으로 즉시 서명. 100% 브라우저 기반 — 비밀 키와 개인 키가 기기를 떠나지 않음.
무료 JWT 비밀 키 생성기 — HS256/384/512
보안 도구
온라인으로 HS256/384/512용 강력한 RFC 준수 JWT 비밀 키를 생성하세요. 100% 브라우저 실행, 서버 전송 없음. base64url·base64·hex, .env 복사 지원.
MD5 해시 생성기 · 파일 체크섬 도구
보안 도구
MD5, SHA-256, SHA-1, SHA-512 해시를 온라인에서 무료로 생성합니다. 브라우저에서 텍스트나 파일을 해싱하고 체크섬을 검증하며 결과를 복사할 수 있습니다.
무작위 비밀번호 생성기 (Random Password Generator)
보안 도구
강력한 무작위 비밀번호를 즉시 만드는 무료 온라인 도구. 길이와 문자 종류를 지정해 최대 50개까지 일괄 생성하고 엔트로피 분석을 확인할 수 있습니다.