분산 시스템을 위한 효율적인 CUID 생성기
CUID 생성기는 브라우저에서 충돌 없이 겹치지 않는 CUID2 고유 식별자를 즉시 만들어내는 무료 도구다. 정렬이 가능하고 URL에 쓰기 좋은 형식이어서 데이터베이스 키, 분산 시스템, 웹 애플리케이션에서 안전하게 사용할 수 있다.
CUID 생성기
빠르고 쉽게 충돌 방지 ID를 생성하세요.
문서화
CUID란 무엇인가?
CUID(충돌 방지 고유 식별자)는 어떤 두 항목도 같은 이름을 공유하지 않도록 레코드, 파일 또는 이벤트에 이름을 붙이는 데 사용하는 짧은 영문자와 숫자의 문자열입니다. 이 도구는 @paralleldrive/cuid2 라이브러리를 사용해 현재 형식인 CUID2를 생성합니다. 각 ID의 길이는 25자이며 소문자와 숫자만 포함하고, 전적으로 브라우저에서 생성되므로 서버로 전송되는 정보는 없습니다.
이 CUID 생성기 사용 방법
- 새 CUID 생성을 클릭해 ID를 만듭니다.
- 클립보드에 복사를 클릭해 복사합니다.
- 데이터베이스, 파일 이름 또는 애플리케이션에 ID를 붙여 넣습니다.
- 다른 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자를 유지합니다. 무작위 선행 문자를 추가하면 완성된 ID는 이 도구가 설정한 길이인 25자가 됩니다.
첫 번째 문자만 독립적으로 사용됩니다. 모든 ID가 숫자가 아닌 문자로 시작하도록 앞에 무작위 문자를 배치합니다. SQL 테이블 및 열 이름과 같은 많은 시스템에서는 식별자가 문자로 시작해야 하므로, 이를 통해 CUID2를 거의 어디서나 이름으로 안전하게 사용할 수 있습니다. 첫 문자 뒤의 모든 문자는 하나의 연속된 불투명한 해시 본문을 이루며, 별도의 구간은 없습니다.
해시는 한 방향으로만 작동하므로 입력값을 완성된 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 비교
| 기능 | CUID2 | UUID v4 | 자동 증가 |
|---|---|---|---|
| 길이 | 25자 | 하이픈을 포함한 36자 | 다양함(보통 짧은 숫자) |
| 문자 집합 | 소문자와 숫자 | 십육진수와 하이픈 | 숫자 |
| 중앙 조정 필요 | 아니요 | 아니요 | 예(데이터베이스 시퀀스) |
| 생성 시각순 정렬 가능 | 아니요 | 아니요 | 예 |
| 인코딩 없이 URL에 적합 | 예 | 예 | 예 |
CUID2와 UUID v4는 중앙 조정 없이 ID를 생성한다는 동일한 문제를 해결합니다. CUID2는 더 짧고 사용하는 문자 집합도 작아서 읽고 URL에 붙여 넣기 쉽습니다. UUID도 하이픈이 URL에서 예약되지 않은 문자이므로 웹 주소에서 안전하지만, 11자 더 깁니다.
일반적인 활용
- 여러 서버가 독립적으로 행을 삽입하는 분산 데이터베이스의 기본 키
- 여러 마이크로서비스를 거치는 하나의 작업을 추적하는 데 사용하는 요청 ID 또는 추적 ID
- 두 파일이 서로 덮어쓰지 않도록 업로드 파일에 사용하는 파일 이름
- 웹 애플리케이션의 세션 ID 또는 토큰 ID
- Kafka나 RabbitMQ 같은 큐의 메시지 ID
간략한 역사
최초의 CUID 형식은 분산 애플리케이션에서 UUID의 대안으로 Eric Elliott가 2012년에 공개했습니다. 같은 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 열을 유지해야 합니다.