데이터베이스에 사용자 ID를 1, 2, 3으로 매기다가 서버를 분산하면서 문제가 생겼다. 서버 A에서 만든 ID 1001과 서버 B에서 만든 ID 1001이 충돌한 것이다. 이런 상황을 원천적으로 막기 위해 나온 것이 UUID다.
UUID가 뭔가
UUID(Universally Unique Identifier)는 128비트짜리 고유 식별자다. 550e8400-e29b-41d4-a716-446655440000 같은 형태로, 32개의 16진수 문자가 하이픈으로 구분되어 있다.
가장 큰 특징은 중앙 관리 서버 없이도 전 세계 어디서든 고유한 값을 만들 수 있다는 점이다. 가능한 조합이 약 3.4 × 1038개(340간)이기 때문에, 매초 10억 개씩 생성해도 중복이 발생할 확률은 사실상 0에 가깝다.
자동 증가 ID 대신 UUID를 쓰는 이유
| 비교 항목 | 자동 증가 ID (1, 2, 3...) | UUID |
|---|---|---|
| 분산 환경 | 서버 간 ID 충돌 가능 | 충돌 확률 사실상 0 |
| 보안 | 순서 노출 (ID 1000이면 사용자 1000명) | 순서·규모 추측 불가 |
| 크기 | 4~8바이트 | 16바이트 (상대적으로 큼) |
| 가독성 | 짧고 읽기 쉬움 | 길고 읽기 어려움 |
| 생성 속도 | DB 의존 | 애플리케이션에서 독립 생성 |
외부에 노출되는 API 리소스 ID에 자동 증가 숫자를 쓰면, /users/1부터 /users/9999까지 순서대로 접근하는 공격(IDOR)이 가능하다. UUID를 쓰면 값을 예측할 수 없어서 이런 위험이 줄어든다.
UUID 버전별 차이
- v1: 타임스탬프 + MAC 주소 기반. 생성 시각과 기기 정보가 포함되어 프라이버시 문제가 있다.
- v4: 완전 랜덤 생성. 가장 널리 쓰인다. 시간이나 기기 정보가 들어가지 않는다.
- v5: 이름 기반(SHA-1). 같은 입력에 항상 같은 UUID가 나온다.
- v7: 타임스탬프 + 랜덤 결합. 정렬 가능하면서 고유성도 보장. 최근 주목받는 버전이다.
특별한 이유가 없다면 v4를 쓰면 된다. 대부분의 프레임워크와 라이브러리가 기본으로 v4를 지원한다.
빠르게 UUID 생성하기
터미널에서 uuidgen 명령이나 프로그래밍 언어의 내장 함수로 생성할 수 있지만, 대량으로 필요하거나 특정 형식이 필요할 때는 웹 도구가 편하다. UUID 생성기에서 버튼 한 번이면 v4 UUID가 나오고, 최대 1,000개까지 한꺼번에 생성할 수 있다. 하이픈 제거, 중괄호 포함, URN 형식, 대문자 변환 같은 포맷 옵션도 지원되기 때문에 DB 마이그레이션이나 테스트 데이터 생성에 유용하다.
TIP UUID를 파일명이나 URL slug로 쓸 때 하이픈이 거슬린다면 "하이픈 제거" 옵션을 켜면 된다. 550e8400e29b41d4a716446655440000 형태로 출력된다.고유 식별자가 필요한 순간은 개발 과정에서 끊임없이 찾아온다. UUID는 단순하지만 분산 환경에서의 충돌 문제를 가장 깔끔하게 해결해주는 도구다.