NID

Nano ID / ULID 생성기 id

짧은 Nano ID 문자열이나 시간 순으로 정렬 가능한 ULID 식별자를 브라우저에서 생성합니다.

type
length count
OUTPUTidentifiers
0 lines 0 chars
1
도구 설명

이 도구가 하는 일

UUID v4는 널리 쓰이지만 36자로 길고 무작위라 정렬이 되지 않습니다. 이런 단점을 보완한 대안이 Nano ID와 ULID입니다.

Nano ID는 기본 21자로 UUID보다 짧으면서 실질적으로 같은 수준의 충돌 저항성을 가집니다. URL에 안전한 문자만 사용하므로 별도 인코딩 없이 주소에 넣을 수 있어 짧은 링크나 공개 식별자에 적합합니다. 길이를 조절해 필요한 만큼 충돌 여유를 확보할 수 있습니다.

ULID는 26자이며 앞쪽 10자가 밀리초 단위 타임스탬프, 뒤쪽 16자가 난수입니다. 이 구조 덕분에 문자열을 그냥 정렬하면 생성 시간 순서가 됩니다. 데이터베이스 인덱스에 순차적으로 쌓이므로 무작위 UUID보다 삽입 성능이 좋고, 식별자만 보고도 생성 시점을 대략 알 수 있습니다. 두 형식 모두 브라우저의 암호학적 난수 생성기를 사용합니다.

언제 사용하나요

공개 URL에 노출할 짧은 식별자가 필요할 때, 삽입이 많은 테이블의 기본 키를 정렬 가능한 형태로 만들고 싶을 때, 로그나 요청 추적 ID를 생성할 때, UUID가 너무 길어 화면이나 QR에 넣기 부담스러울 때 사용합니다.

입력과 출력 예시

입력 Nano ID, 길이 21, 5개
출력 V1StGXR8_Z5jdHi6B-myT 형태의 문자열 5개

URL에 그대로 넣을 수 있는 문자만 사용합니다.

입력 ULID 3개
출력 01JQ... 로 시작하는 26자 식별자

앞부분이 타임스탬프라 생성 순서대로 정렬됩니다.

주의사항

식별자를 추측하기 어렵다는 성질을 접근 제어에 사용하면 안 됩니다. 주소를 아는 사람만 볼 수 있는 구조는 링크가 유출되는 순간 무너지므로 권한 검사는 별도로 해야 합니다. ULID는 생성 시각이 문자열에 그대로 담겨 있다는 점도 고려하십시오. 가입 시점이나 주문 시각처럼 외부에 알려지면 곤란한 정보가 식별자에서 드러날 수 있습니다. 또한 Nano ID 길이를 지나치게 줄이면 충돌 확률이 급격히 올라가므로, 생성량이 많은 곳에서는 기본값 이상을 유지하는 것이 안전합니다.

자주 묻는 질문

UUID 대신 써도 되나요?

용도에 따라 다릅니다. 다른 시스템과 표준 형식을 주고받아야 한다면 UUID가 안전하고, 길이나 정렬이 중요하다면 Nano ID나 ULID가 유리합니다.

ULID는 정말 시간 순으로 정렬되나요?

앞 10자가 밀리초 타임스탬프를 Crockford Base32로 표현한 것이라 문자열 정렬이 곧 시간 정렬이 됩니다. 다만 같은 밀리초에 생성된 값들 사이의 순서는 보장되지 않습니다.

Copied