SomeeLab.tools

UUID 생성기

UUID v4와 시간순으로 정렬되는 v7을 한 번에 여러 개 만듭니다. 대문자·하이픈 없는 형태도 지원합니다. 가입 없이 브라우저에서 바로 생성됩니다.

전부 난수입니다. 순서가 상관없다면 이쪽을 씁니다.

개수

    v4와 v7 중 무엇을 쓸까

    v4는 122비트가 전부 난수입니다. 값만 봐서는 언제 만들었는지, 어디서 만들었는지 알 수 없습니다. 공개 주소에 노출되는 식별자나 초대 링크처럼 순서를 감춰야 하는 자리에 맞습니다.

    v7은 앞 48비트가 밀리초 타임스탬프이고 나머지가 난수입니다. 그래서 문자열을 그냥 정렬하면 만든 순서대로 늘어섭니다. 데이터베이스 기본키, 로그 식별자, 이벤트 아이디처럼 시간순이 도움이 되는 자리에 씁니다. 대신 생성 시각이 값에 드러나므로, 그것이 알려지면 곤란한 자리에는 v4를 쓰세요.

    NIL은 전부 0인 특수한 값입니다. 널을 허용하지 않는 컬럼에 “아직 없음”을 넣어야 할 때 자리표시자로 씁니다.

    데이터베이스 기본키로 쓸 때

    정수 자동증가 대신 UUID를 기본키로 쓰면 서버 여러 대가 서로 물어보지 않고 키를 만들 수 있고, 주소에 노출돼도 다른 행을 추측당하지 않습니다.

    문제는 v4의 무작위성입니다. B-tree 인덱스는 새 키가 끝에 붙을 때 가장 효율적인데, v4는 매번 인덱스 한가운데 아무 데나 꽂히므로 페이지가 계속 쪼개집니다. 테이블이 커질수록 쓰기가 느려지고 인덱스가 뚱뚱해집니다. v7은 값이 시간순으로 늘어나 새 키가 항상 끝에 붙기 때문에 이 문제를 피합니다. 새로 만드는 테이블이라면 v7이 기본값으로 무난합니다.

    MySQL이라면 BINARY(16), PostgreSQL이라면 uuid 타입에 넣으세요. 36글자 문자열로 저장하면 한 행에 20바이트를 더 쓰고 비교도 느려집니다.

    하이픈 없는 형태

    하이픈은 규격이 정한 표시 방식일 뿐 값의 일부가 아닙니다. 파일 이름, 쿠폰 코드, 일부 API 응답에서는 32글자 붙은 형태를 씁니다. 대문자도 마찬가지로 표시 차이일 뿐이며, 비교할 때는 소문자로 맞춘 뒤 견주는 것이 안전합니다.

    한 번에 여러 개 뽑을 때

    이 도구는 v7을 여러 개 만들 때 뽑은 순서를 유지합니다. 같은 밀리초 안에서 만들어지면 타임스탬프가 똑같아져 순서가 뒤섞이는데, 그 자리의 난수 일부를 카운터로 써서 순서를 지켜 둡니다. 목록을 그대로 복사해 붙여넣어도 정렬이 흐트러지지 않습니다.