본문 바로가기

UUID v4 생성 방법 총정리 - 온라인 생성기부터 자바스크립트, 파이썬 코드까지 한번에

중복 없는 고유 식별자가 필요할 때 가장 많이 쓰는 UUID v4. 온라인 생성기 사용법부터 언어별 생성 코드, 충돌 확률, 실무 주의사항까지 바로 적용할 수 있게 정리했습니다.


UUID v4 생성 방법 총정리 - 온라인 생성기부터 자바스크립트, 파이썬 코드까지 한번에

데이터베이스 기본 키, 주문 번호, 업로드 파일 이름, API 요청 추적 ID. 개발을 하다 보면 절대 겹치면 안 되는 값이 필요한 순간이 자주 찾아옵니다. 순번을 붙이자니 서버가 여러 대일 때 관리가 복잡하고, 타임스탬프를 쓰자니 같은 시각에 두 개가 생기면 끝입니다. 이럴 때 가장 널리 쓰이는 해답이 UUID v4입니다. UUID v4 생성 방법을 온라인 도구, 명령어, 프로그래밍 언어별 코드로 나누어 정리하고, 실제로 겹칠 확률이 얼마나 되는지도 구체적인 숫자로 확인해 보겠습니다.

UUID v4란 무엇인가

UUID(Universally Unique Identifier)는 128비트 크기의 고유 식별자입니다. 표기할 때는 16진수 32자를 하이픈 4개로 구분해 총 36자 문자열로 씁니다. 형태는 다음과 같습니다.

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx

세 번째 그룹이 항상 숫자 4로 시작하는 것이 v4의 특징입니다. 이 자리가 버전 번호이기 때문입니다. UUID에는 여러 버전이 있는데 각각 생성 원리가 다릅니다.

  • v1: 타임스탬프와 MAC 주소 기반. 생성 시각과 장비 정보가 노출될 수 있습니다
  • v4: 122비트를 난수로 채우는 완전 랜덤 방식. 현재 가장 널리 쓰입니다
  • v5: 이름과 네임스페이스를 SHA-1으로 해시. 같은 입력이면 항상 같은 결과가 나옵니다
  • v7: 타임스탬프와 난수를 결합해 시간순 정렬이 가능한 최신 버전입니다
참고: UUID 표준은 오랫동안 RFC 4122였지만, 2024년 5월 RFC 9562로 개정되면서 v6, v7, v8이 공식 추가되었습니다. 다만 범용성과 라이브러리 지원 면에서는 여전히 v4가 기본 선택지입니다.

온라인 생성기로 만드는 가장 빠른 방법

코드를 짤 필요 없이 한두 개만 필요하다면 온라인 생성기가 가장 빠릅니다. 검색창에 UUID generator를 입력하면 나오는 사이트 대부분이 접속 즉시 새 UUID를 보여주고, 버튼 한 번으로 복사까지 됩니다. 테스트 데이터를 만들거나 설정 파일에 넣을 키를 하나 뽑을 때 유용합니다.

요즘 온라인 생성기는 대부분 서버가 아니라 브라우저 안에서 자바스크립트로 직접 생성하기 때문에 생성된 값이 외부로 전송되지 않습니다. 이런 브라우저 기반 유틸리티는 UUID 생성기 외에도 다양합니다. 반응형 웹을 테스트할 때 현재 뷰포트 해상도를 바로 보여주는 화면 크기 확인 도구나, 작업 시간을 재는 온라인 타이머처럼 설치 없이 열자마자 쓰는 도구들을 북마크해 두면 개발 작업 속도가 확실히 빨라집니다.

대량으로 필요할 때

온라인 생성기 중에는 한 번에 수백 개를 목록으로 뽑아주는 곳도 있습니다. 하지만 수천 개 이상이 필요하거나 반복 작업이라면 다음 섹션의 코드 방식이 훨씬 효율적입니다.

개발 언어별 UUID v4 생성 코드

주요 환경별 생성 방법을 표로 정리했습니다. 대부분 표준 라이브러리만으로 해결되므로 별도 설치가 필요 없습니다.

환경생성 코드비고
JavaScriptcrypto.randomUUID()브라우저, Node.js 14.17 이상
Pythonuuid.uuid4()표준 라이브러리 uuid 모듈
JavaUUID.randomUUID()java.util 패키지 기본 제공
Linux 터미널uuidgen대부분의 배포판에 기본 포함
PostgreSQLgen_random_uuid()버전 13부터 확장 설치 없이 사용

자바스크립트에서 생성하기

브라우저 개발자 도구 콘솔을 열고 crypto.randomUUID()를 입력하면 즉시 결과가 나옵니다. 별도 라이브러리 없이 표준 Web Crypto API만으로 암호학적으로 안전한 난수를 사용해 생성합니다. 크롬 92, 파이어폭스 95, 사파리 15.4 이상에서 지원됩니다.

팁: crypto.randomUUID()는 보안 컨텍스트에서만 동작합니다. HTTPS 사이트와 localhost에서는 되지만, HTTP로 접속한 페이지에서는 함수 자체가 없다는 오류가 납니다. 로컬 개발 서버에서는 문제없으니 걱정하지 않아도 됩니다.

파이썬에서 생성하기

표준 라이브러리 두 줄이면 끝납니다. import uuidstr(uuid.uuid4())를 호출하면 36자 문자열을 얻습니다. 반복문과 결합하면 수만 개도 몇 초 안에 생성됩니다.

충돌 확률, 정말 안 겹칠까

v4는 122비트를 난수로 채우므로 가능한 조합은 2의 122제곱, 약 5.3 x 10의 36제곱 개입니다. 생일 문제 공식으로 계산하면 초당 10억 개씩 약 86년을 쉬지 않고 생성해야 충돌 확률이 50%에 도달합니다. 일반적인 서비스 규모에서는 사실상 겹칠 수 없다는 뜻입니다.

UUID v4의 진짜 가치는 겹치지 않는다는 사실보다, 서버끼리 조율 없이 각자 만들어도 안전하다는 데 있습니다. 중앙에서 번호를 발급받을 필요가 없으니 분산 시스템 설계가 단순해집니다.

단, 이 계산은 품질 좋은 난수를 전제로 합니다. 표에 정리한 표준 함수들은 모두 암호학적 난수 생성기를 쓰므로 안심해도 되지만, Math.random 같은 일반 난수로 직접 구현한 코드는 충돌 위험이 커지므로 피해야 합니다.

실무 활용 시 주의사항

UUID v4는 강력하지만 만능은 아닙니다. 실무에서 자주 부딪히는 함정 세 가지를 정리했습니다.

  • 정렬이 필요한 기본 키에는 불리합니다. 값이 완전 랜덤이라 삽입 순서와 무관하게 흩어지고, 인덱스 단편화로 대량 삽입 성능이 떨어질 수 있습니다. 시간순 정렬이 중요하면 v7을 검토하세요
  • MySQL의 UUID() 함수는 v4가 아닙니다. 이 함수는 v1을 생성하므로 MAC 주소 기반 값이 나옵니다. MySQL 8.0에서 v4가 필요하면 애플리케이션 레벨에서 생성해 넣는 방식이 일반적입니다
  • 비밀번호 재설정 토큰 같은 보안 용도라면 형식보다 난수원이 중요합니다. 표준 함수로 만든 v4는 무방하지만, 예측 가능한 난수로 만든 UUID는 형식만 그럴듯할 뿐 안전하지 않습니다

지금 바로 두 가지만 해보세요. 첫째, 브라우저 콘솔에서 crypto.randomUUID()를 실행해 결과의 세 번째 그룹이 4로 시작하는지 직접 확인해 보세요. 둘째, 지금 진행 중인 프로젝트에서 순번 ID 때문에 서버 간 조율 코드가 있다면 UUID v4로 바꿀 수 있는지 검토해 보세요. 코드가 눈에 띄게 단순해질 것입니다.

3일 무료체험큰손탐지기, 지금 바로 시작하세요

설치 없이 웹에서 바로 사용 가능 · PC & 모바일 지원

무료체험 시작
카카오톡 상담