UUID란 무엇인가 - 개념부터 버전별 차이, 충돌 확률, 실무 활용까지 한번에 정리
개발 문서나 URL에서 한 번쯤 봤을 긴 영문 숫자 조합, UUID의 정체를 쉽게 풀어드립니다. 버전별 차이와 충돌 확률, 실무에서 언제 써야 하는지까지 실제 데이터 기준으로 정리했습니다.
![]()
인터넷을 쓰다 보면 주소창이나 다운로드 파일명에서 550e8400-e29b-41d4-a716-446655440000 같은 긴 영문 숫자 조합을 본 적이 있으실 겁니다. 처음 보면 암호 같고, 오류 코드처럼 보이기도 합니다. 사실 이것이 바로 UUID입니다. 개발자가 아니어도 웹 서비스를 운영하거나 데이터를 다루는 분이라면 반드시 마주치게 되는 개념이라, UUID란 무엇인가를 한 번 정리해두면 두고두고 쓸모가 있습니다.
UUID란 무엇인가 - 기본 개념
UUID(Universally Unique Identifier)는 이름 그대로 범용 고유 식별자입니다. 전 세계 어디서 누가 만들어도 사실상 겹치지 않는 128비트 숫자를 뜻합니다. 중앙 서버에 물어보지 않고도 각자 알아서 만들 수 있다는 점이 핵심입니다.
비유하자면 주민등록번호와 비슷합니다. 사람 이름은 동명이인이 있지만 주민등록번호는 겹치지 않죠. 데이터 세계에서도 마찬가지입니다. '주문서', '사진1.jpg' 같은 이름은 얼마든지 중복될 수 있어서, 시스템은 각 데이터에 UUID라는 고유 번호표를 붙여 관리합니다.
- 표준 문서: 2005년 RFC 4122로 표준화됐고, 2024년 5월 RFC 9562로 개정됐습니다
- 크기: 128비트, 문자열로 표기하면 36자(하이픈 4개 포함)
- GUID: 마이크로소프트에서 부르는 이름으로, 사실상 같은 개념입니다
UUID 구조 뜯어보기
UUID는 16진수 32자를 8-4-4-4-12 형태로 하이픈으로 끊어 표기합니다. 예시로 보겠습니다.
550e8400-e29b-41d4-a716-446655440000
여기서 세 번째 그룹의 첫 글자(위 예시에서는 4)가 버전 번호입니다. 즉 UUID 문자열만 봐도 어떤 방식으로 생성됐는지 알 수 있습니다. 네 번째 그룹의 첫 글자는 변형(variant) 정보를 담습니다.
UUID 버전별 차이 정리
UUID는 만드는 방식에 따라 버전이 나뉩니다. 현재 실무에서 의미 있는 버전은 아래와 같습니다.
| 버전 | 생성 방식 | 특징 |
|---|---|---|
| v1 | 타임스탬프 + MAC 주소 | 생성 시각 추적 가능, 기기 정보 노출 우려 |
| v3 | 이름 기반 (MD5 해시) | 같은 입력이면 항상 같은 UUID |
| v4 | 난수 기반 | 가장 널리 사용, 122비트가 완전 무작위 |
| v5 | 이름 기반 (SHA-1 해시) | v3보다 안전한 해시 사용 |
| v7 | 타임스탬프 + 난수 | 2024년 표준 추가, 시간순 정렬 가능 |
대부분의 서비스는 v4를 씁니다. 완전 무작위라 예측이 불가능하기 때문입니다. 다만 데이터베이스 기본 키로 쓰면 값이 뒤죽박죽이라 인덱스 성능이 떨어지는 단점이 있는데, 이를 보완하려고 시간순 정렬이 가능한 v7이 2024년 RFC 9562에 새로 추가됐습니다. 신규 프로젝트라면 v7을 우선 검토할 가치가 충분합니다.
UUID는 정말 겹치지 않을까
v4 UUID는 122비트가 무작위입니다. 경우의 수로는 약 5.3 x 10의 36제곱 개입니다. 얼마나 큰 숫자인지 감이 안 오실 텐데, 구체적으로 계산하면 이렇습니다.
초당 10억 개의 UUID를 86년 동안 쉬지 않고 만들어야 단 한 쌍이 겹칠 확률이 50%에 도달합니다. 약 103조 개를 생성해도 충돌 확률은 10억분의 1 수준입니다. 이론상 겹칠 수 있지만, 현실에서는 겹치지 않는다고 봐도 무방합니다.
그래서 '사실상 고유(practically unique)'라는 표현을 씁니다. 다만 난수 생성기가 부실한 환경에서는 충돌 위험이 올라가므로, 반드시 검증된 표준 라이브러리를 사용해야 합니다.
실무에서 UUID 활용하는 법
UUID가 실제로 쓰이는 자리는 생각보다 다양합니다.
- 데이터베이스 기본 키: 서버 여러 대가 동시에 데이터를 만들어도 ID가 겹치지 않습니다
- 파일 업로드 이름: 사용자들이 같은 이름의 파일을 올려도 덮어쓰기 사고가 없습니다
- 세션, 인증 토큰: 예측 불가능한 값이라 세션 식별에 적합합니다
- 비밀번호 재설정 링크: 이메일로 보내는 일회용 링크에 UUID를 넣어 무작위 접근을 막습니다
다만 단점도 분명합니다. 36자짜리 식별자가 URL에 들어가면 주소가 길고 지저분해집니다. 이벤트 페이지나 문서 공유처럼 사람이 직접 주소를 전달해야 하는 상황이라면, 미투 단축URL 같은 단축 서비스로 줄여서 공유하는 것이 실용적입니다. 시스템 내부에서는 UUID로 관리하고, 사람에게 보여줄 때는 짧은 주소를 쓰는 이원화 방식이 실무의 정석입니다.
UUID 직접 만들어보기
UUID는 별도 프로그램 없이도 바로 만들 수 있습니다.
- 브라우저: 개발자 도구 콘솔에서 crypto.randomUUID() 입력 (v4 생성)
- 파이썬: import uuid; uuid.uuid4()
- 리눅스/맥 터미널: uuidgen 명령어 한 줄
- 온라인 생성기: 검색창에 'UUID generator'만 쳐도 무료 도구가 많습니다
정리하면, UUID는 중앙 관리 없이도 전 세계에서 유일한 번호표를 만드는 표준 기술입니다. 오늘 당장 해볼 액션은 두 가지입니다. 첫째, 브라우저 콘솔에서 crypto.randomUUID()를 실행해 내 손으로 UUID를 하나 만들어보세요. 둘째, 운영 중인 서비스가 있다면 외부에 노출된 식별자가 순번 숫자인지 점검하고, 맞다면 UUID 전환을 검토해보시길 권합니다.