UUID는 소프트웨어 구축에 사용되는 128비트 길이의 표준 식별자이다. 중앙 시스템의 관리 없이도 고유성이 보장되도록 설계되었다는 것이 큰 특징이다.
고유성 보장
128비트의 매우 긴 길이때문에 생성 가능한 개수가 2^128개에 달하기에 중복될 확률은 거의 0에 가깝다.
분산 환경 적합
중앙 서버에 의존하지 않고 독립적으로 ID를 생성할 수 있기에 네트워크, 데이터베이스 등 분산 시스템에 유용하다.
UUID는 128비트의 숫자이며 보통 32자리의 16진수와 4개의 하이픈(-)으로 구성된 문자열 형태로 표현된다.

| 필드 | 사이즈 | 설명 |
|---|---|---|
| time-low | 4hexOctet / 32bit | 타임스탬프의 low field |
| time-mid | 2hexOctet / 16bit | 타임스탬프의 mid field |
| time-high-and-version | 2hexOctet / 16bit | 타임스탬프의 high field & UUID 버전 |
| clock-seq-hi-and-reserved | hexOctet / 8bit | 클락 시퀀스의 high field & variant |
| clock-seq-low | hexOctet / 8bit | 클락 시퀀스의 low field |
| node | 6hexOctet / 48bit | node 식별자 |
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
세번째 그룹의 M은 UUID의 버전을 나타낸다
네번째 그룹의 N은 변종 정보를 포함한다.
ex) a1b2c3d4-e5f6-**4**001-**8**002-9a0b1c2d3e4f
UUID는 여러 생성 방식에 따라 버전이 나뉘며 사용 목적에 따라 적합한 버전을 선택할 수 있다. 자주 사용되는 버전은 V1, V3, V4, V5, V7이다.
| 버전 | 생성 방식 | 특징 | 사용 예시 |
|---|---|---|---|
| V1 | 시간(Timestamp)과 MAC 주소 기반 | - 생성 시점과 장치 정보 포함. - 고유성은 확실하지만, MAC 주소 노출로 보안에 취약할 수 있음. - 시간 순서 정렬이 용이. | 초기 분산 시스템 |
| V3 | MD5 해시 기반 (이름 및 네임스페이스) | - 동일 입력에 대해 항상 동일한 UUID 생성. - 결정론적. | 네임스페이스 기반의 고정된 ID 필요 시 (예: URL) |
| V4 | 랜덤(Random) 값 기반 | - 대부분의 비트가 무작위 값으로 채워짐. 가장 널리 사용됨. - 생성 속도가 빠르고, 외부 정보 노출이 없어 보안성이 높음. - 시간 순서 정렬 불가. | 범용적인 고유 식별자 (DB 기본 키 등) |
| V5 | SHA-1 해시 기반 (이름 및 네임스페이스) | V3와 유사하나, 더 강력한 SHA-1 해시 사용. | V3와 동일 목적이지만 더 높은 보안성 요구 시 |
| V7 | 밀리초 정밀도 타임스탬프와 랜덤 데이터 결합 | - V1의 단점을 개선하여 정렬 가능하면서도 분산 시스템에 최적화. - 데이터베이스 키로 사용하기에 매우 적합함. | 최신 분산 시스템의 시간 기반 키 |
대부분의 언어는 UUID 라이브러리를 지원한다.
UUID 클래스를 사용하면 된다.
import java.util.UUID;
UUID.randomUUID().toString()
randomUUID()를 호출하면 버전 4 UUID 값을 가진 객체가 반환된다.
자바스크립트의 경우 uuid npm 패키지를 설치해야 한다.
npm install uuid
설치 후에 필요한 버전의 UUID 메소드를 호출하면 된다.
import { v4 as uuidv4 } from 'uuid';
uuidv4();
파이썬도 UUID 라이브러리를 사용할 수 있다. 이때 각 버전을 생성할 수 있는 메소드를 지원한다.
import uuid
uuid.uuid4()