본문으로 건너뛰기

분산 시스템을 위한 효율적인 CUID 생성기

CUID 생성기는 브라우저에서 충돌 없이 겹치지 않는 CUID2 고유 식별자를 즉시 만들어내는 무료 도구다. 정렬이 가능하고 URL에 쓰기 좋은 형식이어서 데이터베이스 키, 분산 시스템, 웹 애플리케이션에서 안전하게 사용할 수 있다.

CUID 생성기

빠르고 쉽게 충돌 방지 ID를 생성하세요.

"새 CUID 생성"을(를) 클릭하면 ID가 만들어집니다.
로딩 계산기...
📚

문서화

CUID란 무엇인가?

CUID(충돌 저항 고유 식별자)는 레코드, 파일, 이벤트에 붙이는 이름표로 쓰는 짧은 문자와 숫자의 문자열로, 어떤 두 항목도 같은 이름을 갖지 않게 합니다. 이 도구는 이 형식의 현재 버전인 CUID2를 @paralleldrive/cuid2 라이브러리로 생성합니다. 각 ID는 길이가 25자이고 소문자와 숫자만 포함하며, 전적으로 브라우저 안에서 만들어집니다. 서버로는 아무것도 전송되지 않습니다.

이 CUID 생성기 사용 방법

  1. 새 CUID 생성을 클릭해 ID를 만듭니다.
  2. 클립보드에 복사를 클릭해 복사합니다.
  3. 데이터베이스, 파일 이름 또는 애플리케이션에 ID를 붙여 넣습니다.
  4. 다른 ID를 만들려면 다시 생성을 클릭합니다. 서로 다른 CUID2 값 사이에 충돌이 발생할 가능성은 극히 낮지만 수학적으로 불가능한 것은 아닙니다.

생성된 ID는 페이지 URL에도 저장되므로 결과로 연결되는 링크를 공유하거나 북마크할 수 있습니다.

CUID2 구조와 공식

CUID2는 다음과 같이 만들어집니다.

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

해시 함수는 네 가지 비공개 입력(현재 시각, 세션별 카운터, 호스트 컴퓨터의 지문, 무작위 엔트로피)을 섞어 SHA3-512로 처리합니다. 결과는 36진수(숫자 0-9와 영문자 a-z)로 변환한 뒤 요청한 길이로 잘라 냅니다. 라이브러리의 기본 길이는 24자이며, 이 도구는 25자를 요청합니다.

첫 글자만 따로 구분됩니다. 모든 ID가 숫자가 아니라 문자로 시작하도록 맨 앞에 놓인 무작위 문자입니다. 라이브러리 제작자들은 첫 글자 덕분에 ID를 JavaScript와 HTML/CSS에서 쓸 수 있는 식별자로 사용할 수 있다고 설명합니다. 첫 글자 뒤의 모든 문자는 하나로 이어진, 내부를 알 수 없는 해시 본문의 일부입니다. 별도의 구간은 없습니다.

해시는 한 방향으로만 작동하므로 입력값을 완성된 ID에서 다시 추출할 수 없습니다. CUID2에는 복구할 수 있는 타임스탬프, 카운터 또는 지문이 없습니다. 이는 의도적인 개인정보 보호 및 보안 선택입니다. ID만으로는 언제 또는 어디서 생성되었는지 알 수 없습니다.

예시

이 도구로 ID를 생성하면 다음과 같은 결과가 나올 수 있습니다.

1vcpuhcj51eomj1o31dnlqopu0
2

여기서 v는 무작위 첫 글자이고, cpuhcj51eomj1o31dnlqopu0(24자)는 해시 본문입니다. 첫 글자는 항상 영문자입니다. 해시 본문에는 문자와 숫자가 섞여 있을 수 있습니다.

시스템에서 CUID2를 사용하는 이유

  • 조정이 필요하지 않습니다. 어떤 컴퓨터든 중앙 서버나 데이터베이스에 다음 값을 요청하지 않고 독립적으로 유효한 ID를 생성할 수 있습니다.
  • 충돌 방지. 시각, 카운터, 호스트 지문, 무작위 엔트로피를 결합하므로 초당 많은 ID를 생성하더라도 두 컴퓨터가 같은 ID를 만들 가능성은 극히 낮습니다.
  • URL에 적합합니다. CUID2는 소문자와 숫자만 사용하므로 웹 주소에 사용할 때 인코딩할 필요가 없습니다.
  • 빠르고 비공개로 생성됩니다. 이 도구는 브라우저에서 생성기를 실행하므로 ID가 즉시 만들어지고 기기 밖으로 전송되지 않습니다.

CUID2 ID는 생성 시각순으로 정렬할 수 없습니다. 데이터베이스 자동 증가 숫자나 이전 CUID(버전 1) 형식과 달리 CUID2는 타임스탬프를 그대로 저장하지 않고 해시 안에 숨깁니다. 레코드를 생성 순서로 정렬해야 하는 애플리케이션은 ID와 함께 별도의 타임스탬프 열을 저장해야 합니다.

CUID2와 UUID 및 자동 증가 ID 비교

기능CUID2UUID v4자동 증가
길이25자하이픈을 포함한 36자다양함(보통 짧은 숫자)
문자 집합소문자와 숫자십육진수와 하이픈숫자
중앙 조정 필요아니요아니요예(데이터베이스 시퀀스)
생성 시각순 정렬 가능아니요아니요예
인코딩 없이 URL에 적합예하이픈 주변에 주의가 필요함예

CUID2와 UUID v4는 같은 문제, 즉 중앙 조정 없이 ID를 생성하는 문제를 해결합니다. UUID는 32개의 십육진수 숫자와 4개의 하이픈으로 이루어진 "헥스와 대시" 문자열 형식으로 쓴 128비트 값입니다. CUID2는 더 짧고 문자 집합이 더 작아서 읽기 쉽고 URL에 붙여 넣기도 쉽습니다.

일반적인 활용

  • 여러 서버가 독립적으로 행을 삽입하는 분산 데이터베이스의 기본 키
  • 여러 마이크로서비스를 거치는 하나의 작업을 추적하는 데 사용하는 요청 ID 또는 추적 ID
  • 두 파일이 서로 덮어쓰지 않도록 업로드 파일에 사용하는 파일 이름
  • 웹 애플리케이션의 세션 ID 또는 토큰 ID
  • Kafka나 RabbitMQ 같은 큐의 메시지 ID

간략한 역사

원래의 CUID 형식은 분산 애플리케이션에서 UUID를 대신할 방법으로 Eric Elliott이 만들었습니다. 이 형식은 현재 CUID2로 대체되어 사용이 권장되지 않습니다. 같은 Paralleldrive 프로젝트에서 공개한 CUID2는 암호학적 해시를 중심으로 형식을 다시 설계했고, 원래 버전이 노출하던 복원 가능한 타임스탬프와 카운터를 제거했습니다. 이 도구는 CUID2 ID만 생성합니다.

자주 묻는 질문

CUID(v1)와 CUID2의 차이는 무엇인가요? CUID v1은 ID 안에 타임스탬프와 카운터를 표시된 형태로 저장하므로 ID를 정렬할 수 있었지만, 언제 몇 개의 ID가 생성되었는지도 노출했습니다. CUID2는 이러한 표시 필드를 단방향 해시로 대체하므로 ID에서 어떤 정보도 다시 읽어 낼 수 없습니다.

이 도구에서 생성한 CUID를 생성 시각순으로 정렬할 수 있나요? 아니요. CUID2에는 복구 가능한 타임스탬프가 없으므로 문자열만 보고 생성 시점에 따라 ID를 정렬할 수 없습니다.

생성된 ID의 길이는 얼마이며, 길이를 변경할 수 있나요? 이 도구는 항상 25자 ID를 생성합니다. 이 도구에는 다른 길이를 요청하는 옵션이 없습니다.

서로 다른 두 컴퓨터가 동시에 같은 CUID2를 생성할 수 있나요? 이론적으로는 가능하지만 실제로 발생할 가능성은 극히 낮습니다. 각 ID는 호스트별 지문과 무작위 엔트로피를 결합하므로, 서로 독립적인 컴퓨터들이 같은 해시를 생성할 가능성은 매우 낮습니다.

이 도구는 서버로 데이터를 전송하나요? 아니요. ID는 로컬 시스템 시계와 브라우저가 제공하는 무작위성을 사용해 브라우저에서 실행되는 JavaScript로 생성됩니다. 어떤 정보도 전송되지 않습니다.

CUID2를 데이터베이스 기본 키로 사용할 수 있나요? 예. CUID2 ID는 분산 데이터베이스의 기본 키로 잘 작동합니다. 중앙 시퀀스를 확인하지 않고도 어떤 노드에서든 생성할 수 있기 때문입니다. 삽입 시각순으로 자연스럽게 정렬되지는 않으므로, 해당 순서가 필요한 애플리케이션은 별도의 created_at 열을 유지해야 합니다.

참고 자료

  1. Paralleldrive. Cuid2 (README). github.com/paralleldrive/cuid2 — 엔트로피 원천, 첫 글자, 36진수 출력, 기본 길이 24, 복원할 수 없는 입력, createdAt 관련 조언.
  2. Paralleldrive. Cuid (사용 중단). github.com/paralleldrive/cuid — Eric Elliott이 만든 원래의 CUID이며, Cuid2로 대체되어 사용이 중단되었습니다.
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). rfc-editor.org — 128비트 UUID, 헥스와 대시의 문자열 형식, 중앙 등록 없음.