UUID v4 생성기의 기본 동작 방식
이 페이지는 단일 입력 세트로 하나 이상의 UUID v4 식별자를 생성한다. 사용자는 생성할 개수(1~100 사이), 대문자 표시 여부, 하이픈 포함 여부를 제어할 수 있다. 기본 출력은 소문자에 하이픈이 포함된 36자 문자열이다. 옵션을 변경하면 즉시 전체 목록이 다시 생성된다. 모든 생성은 브라우저 내에서 암호학적으로 강력한 난수 발생기를 통해 이루어지며, 서버로 데이터가 전송되지 않는다.
생성된 각 UUID는 한 번 클릭하면 개별 클립보드 복사가 가능하고, "모두 복사" 버튼으로 목록 전체를 한 번에 복사할 수 있다. 상태 메시지는 초기 "준비됨", 생성 후 "생성됨", 복사 후 "모두 복사 완료!"로 표시된다.
UUID v4의 구조와 무작위성
UUID v4는 128비트 전체 중 122비트가 무작위로 채워진다. RFC 4122에 정의된 이 버전은 타임스탬프를 포함하지 않는다. 결과는 32개의 16진수 문자(0–9, a–f)와 4개의 하이픈으로 표현되는 8-4-4-4-12 패턴을 따른다. 하이픈을 비활성화하면 32자 연속 문자열이 된다.
122비트 무작위성은 약 5.3×10^36개의 가능한 값을 의미하며, 충돌 확률은 실용적으로 무시할 수준이다. 예를 들어 초당 10억 개의 UUID를 생성해도 수백 년이 지나야 충돌 가능성이 50%에 도달한다. 브라우저의 crypto.getRandomValues()는 운영체제 수준의 엔트로피를 활용하므로 예측 불가능성도 보장된다.
UUID v4가 다른 식별자와 다른 점
UUID v4의 가장 큰 특징은 시간 정보를 전혀 담지 않는다는 것이다. 이 때문에 데이터베이스 기본 키로 사용하면 B-트리 인덱스가 심각한 단편화를 겪는다. 새 레코드가 임의 위치에 삽입되므로 페이지 분할이 빈번해지고 쓰기 성능이 저하된다. 반면 UUID v7이나 ULID는 타임스탬프를 선두에 배치하여 시간 순서대로 정렬되므로 인덱스 친화적이다.
다만 v7이나 ULID는 생성 시간이 드러나므로 보안 토큰이나 세션 ID처럼 예측 불가능성이 중요한 경우에는 v4가 적합하다. 또한 v4는 널리 지원되는 표준이며, 대부분의 언어와 라이브러리에서 손쉽게 생성 및 파싱할 수 있다.
입력 옵션의 세부 규칙과 주의사항
- 개수: 1에서 100 사이의 정수만 허용된다. 이 범위를 벗어나면 입력이 거부된다.
- 대문자: 기본값은
false(소문자).true로 설정하면 16진수 문자가 A–F로 출력된다. 충돌 확률이나 무작위성에는 영향이 없다. - 하이픈: 기본값은
true(포함). 하이픈이 없는 32자 형식은 일부 데이터베이스나 프로토콜에서 요구될 수 있다. - 재생성: 개수, 대문자, 하이픈 중 하나라도 변경되면 전체 목록이 즉시 새로 생성된다. 부분 변경은 불가능하다.
- 형식 전환: 현재 페이지는 UUID v4만 다루지만, 같은 도구에서 UUID v7, ULID, NanoID로 전환할 수 있다. 형식이 변경되면 대문자와 하이픈 옵션의 동작이 달라질 수 있다.
누가 이 도구를 필요로 하는가
- 보안 관련 개발자: 인증 토큰, 세션 ID, CSRF 보호용 난수 등 예측 불가능한 식별자가 필요할 때.
- 데이터베이스 관리자: UUID v4의 인덱스 성능 영향을 이해하고, 시간 정렬 대안(v7)과 비교 검토해야 하는 경우.
- 테스트 데이터 생성자: 외부 식별자, 익명화된 키, 또는 임시 참조 번호를 대량으로 빠르게 생성해야 할 때.
- 규격 준수 요구: RFC 4122 준수 UUID가 필요한 시스템에서 정확한 형식을 검증하거나 생성할 때.
FAQ
Q: 대문자 UUID와 소문자 UUID는 동등한가?
A: 16진수 대소문자는 의미가 동일하다. 다만 일부 시스템(예: 파일 시스템 경로)에서 대소문자를 구분할 수 있으므로 통일하는 것이 좋다.
Q: 하이픈 없이 32자 형식도 유효한 UUID인가?
A: RFC 4122는 표준 형식으로 하이픈을 정의하지만, 많은 라이브러리와 데이터베이스는 하이픈 없는 32자 문자열도 정상 파싱한다. 다만 일부 구현에서는 오류가 발생할 수 있으므로 사용 전에 확인해야 한다.
Q: 충돌이 발생할 확률은 정말 무시할 만한가?
A: 122비트 무작위성으로 인해 충돌 확률은 약 2^(-122)이다. 10^18개의 UUID를 생성해도 충돌 가능성이 10^-12 미만이므로 실질적으로는 안전하다. 하지만 이론상 0은 아니다.
Q: 브라우저에서 생성하는 것이 안전한가?
A: crypto.getRandomValues()는 운영체제의 CSPRNG를 사용하므로 암호학적으로 안전하다. 서버로 전송되지 않으므로 개인정보 유출 위험이 없다. 오프라인 상태에서도 동작한다.
Q: 왜 UUID v4는 시간순으로 정렬되지 않는가?
A: v4 명세는 122비트를 난수로 채우도록 설계되었다. 시간 정보를 담지 않으므로 정렬 시 의미 있는 순서가 없으며, 데이터베이스 인덱스에 삽입할 때 임의 위치에 쓰여져 성능 저하가 발생할 수 있다.
Q: 100개 이상의 UUID가 필요하면 어떻게 해야 하는가?
A: 현재 도구는 한 번에 최대 100개까지 생성한다. 더 많은 양이 필요하면 여러 번 생성하거나, 직접 스크립트를 작성하여 브라우저의 난수 발생기를 반복 호출하는 방법을 사용할 수 있다.