유틸리티

UUID란 무엇인가, 고유 식별자가 필요한 이유와 생성법

회원 테이블의 PK를 1, 2, 3 순서로 넣으면 URL에 /users/3이 노출된다. 전체 회원이 몇 명인지, 내가 몇 번째 가입자인지 추측할 수 있다. UUID를 쓰면 /users/550e8400-e29b-41d4-a716-446655440000처럼 의미 없는 식별자가 되어 이런 문제가 사라진다.

UUID의 구조

UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 하이픈으로 구분된 32개의 16진수 문자로 표현된다.

550e8400-e29b-41d4-a716-446655440000
├── 8자리 ── 4자리 ── 4자리 ── 4자리 ── 12자리 ──┤

이론상 생성 가능한 UUID의 수는 2의 122승(약 5.3 × 10의 36승)개다. 우연히 같은 값이 나올 확률은 사실상 0에 수렴한다.

UUID 버전별 차이

버전생성 방식특징
v1타임스탬프 + MAC 주소순서 보장, 하드웨어 정보 노출 위험
v3이름 기반 (MD5 해시)같은 입력이면 같은 UUID 생성
v4랜덤 생성가장 널리 사용, 완전 무작위
v5이름 기반 (SHA-1 해시)v3보다 충돌 저항성이 높음
v7타임스탬프 + 랜덤 (2022년 추가)시간순 정렬 가능, DB 인덱스에 유리

실무에서 가장 많이 쓰이는 건 v4다. 생성 시 외부 정보(시간, MAC 주소)에 의존하지 않고 순수 랜덤이라 간단하면서 안전하다.

UUID를 쓰는 실무 사례

  • 분산 시스템 — 여러 서버에서 동시에 ID를 생성해도 충돌하지 않는다. 중앙 서버에 ID를 요청할 필요가 없어 병목이 줄어든다.
  • API 리소스 식별 — URL에 auto_increment ID를 노출하면 보안 취약점이 될 수 있다. UUID로 대체하면 추측이 불가능하다.
  • 파일명·세션 ID — 중복 없는 고유 값이 필요한 모든 곳에 사용 가능하다.

UUID 빠르게 생성하기

코드에서는 각 언어별 라이브러리(uuid npm 패키지, Python의 uuid4(), Java의 UUID.randomUUID())를 쓴다. 코드 바깥에서 테스트 데이터용 UUID가 필요하거나 여러 개를 한 번에 만들어야 할 때는 UUID 생성기에서 개수와 형식을 지정해서 대량 생성한 뒤 파일로 다운로드하는 게 빠르다. 하이픈 제거, 대문자 변환, 중괄호 형식(GUID) 등 옵션도 지원한다.

auto_increment가 편하긴 하지만, 서비스 규모가 커지거나 보안이 중요해지면 UUID 전환을 고려할 시점이 온다. 미리 구조를 알아두면 전환 시 삽질을 줄일 수 있다.