NanoID 생성기
커스텀 알파벳·길이 설정 가능한 고유 ID 생성
NanoID 생성기란?
NanoID는 URL-safe한 암호학적으로 안전한 고유 ID입니다. 기본 21자로 UUID(36자)보다 짧고, 커스텀 알파벳과 길이를 자유롭게 설정할 수 있습니다. crypto.getRandomValues()로 뽑은 무작위 바이트를 알파벳 길이로 나눈 나머지에 매핑해 문자를 고르는데, 이때 알파벳 길이가 256의 약수가 아니면(예: 62자, 26자 등) 단순 나머지 연산은 특정 문자가 살짝 더 자주 나오는 모듈로 편향이 생깁니다. 이를 막기 위해 256을 알파벳 길이로 나눈 몫에 알파벳 길이를 곱한 값보다 큰 바이트는 버리고 다시 뽑는 거부 샘플링(rejection sampling) 방식을 사용해 모든 문자가 완전히 균등한 확률로 나오도록 처리합니다. 숫자 전용, 소문자, 16진수 등 다양한 프리셋을 제공합니다.
자주 묻는 질문
NanoID의 기본 알파벳은?
URL-safe 문자: 0-9, A-Z, a-z, _, - 총 64자입니다.
21자 NanoID의 충돌 확률은?
64자 알파벳 21자 조합 = 64^21 ≈ 10^38 가지. 1초에 100만 개 생성해도 수십억 년 후에야 충돌 가능성이 생깁니다.
이 도구는 편향 없는 무작위 문자를 어떻게 보장하나요?
무작위 바이트(0~255)를 알파벳 길이로 나눈 나머지로 문자를 고르되, 알파벳 길이가 256을 고르게 나누지 못하는 경우(예: 62자, 26자) 나머지 연산만 쓰면 앞쪽 문자가 미세하게 더 자주 뽑히는 편향이 생깁니다. 이를 막기 위해 균등하게 나눠떨어지지 않는 초과분 바이트는 버리고 다시 뽑는 거부 샘플링을 사용해 모든 문자가 정확히 같은 확률로 나오게 합니다.
커스텀 알파벳에 같은 글자를 여러 번 넣거나 256자를 넘게 입력하면 어떻게 되나요?
중복 문자는 자동으로 하나만 남기고 제거됩니다. 또한 알파벳은 최대 256자까지만 사용되며, 그 이상은 잘라내고 엔트로피 정보 아래에 경고를 표시합니다. 이 상한선이 없으면 바이트 값(0~255) 하나로 표현할 수 있는 문자 종류를 넘어서면서 무작위 바이트를 걸러내는 로직이 단 하나도 통과시키지 못해 생성이 끝없이 멈추는 문제가 생길 수 있기 때문입니다.
NanoID는 URL에 직접 사용할 수 있나요?
기본 URL-safe 알파벳은 URL 인코딩 없이 경로나 파라미터로 사용 가능합니다.
NanoID는 정렬 가능한가요?
기본 NanoID는 랜덤이라 정렬되지 않습니다. 정렬이 필요하면 ULID를 사용하세요.
생성은 브라우저에서 안전하게 이루어지나요?
Web Crypto API(getRandomValues)를 사용한 암호학적으로 안전한 랜덤 생성입니다.
NanoID를 데이터베이스 기본키로 사용할 수 있나요?
네. VARCHAR 또는 CHAR 필드로 저장하면 됩니다. 단, 무작위 순서라 순차 ID보다 인덱싱 성능이 낮을 수 있습니다.