마이크로서비스 구조에서 각 서버가 독립적으로 데이터를 생성한다. 자동 증가 번호(1, 2, 3...)를 쓰면 서버 A의 ID 5와 서버 B의 ID 5가 겹칠 수 있다. UUID를 쓰면 이 문제가 사라진다. 전 세계 어디서 생성해도 같은 값이 나올 확률이 사실상 0이기 때문이다.
UUID가 뭔가
UUID(Universally Unique Identifier)는 128비트 길이의 고유 식별자다. 표준 형식은 하이픈으로 구분된 32개의 16진수 문자로 표현된다.
550e8400-e29b-41d4-a716-446655440000
가능한 조합의 수는 약 3.4 x 1038개다. 1초에 10억 개씩 생성해도 수십억 년간 겹치지 않는 수준이니, 실무에서 충돌을 걱정할 필요는 없다.
UUID 버전별 차이
| 버전 | 생성 방식 | 특징 |
|---|---|---|
| v1 | 타임스탬프 + MAC 주소 | 생성 시간과 장비를 추적할 수 있어 프라이버시 우려 |
| v3 | 이름 기반(MD5 해시) | 같은 입력이면 항상 같은 UUID 생성 |
| v4 | 무작위 난수 | 가장 많이 쓰임. 완전한 랜덤 생성 |
| v5 | 이름 기반(SHA-1 해시) | v3의 보안 강화 버전 |
실무에서 가장 많이 쓰이는 건 v4다. 암호학적 난수 생성기로 만들기 때문에 예측이 불가능하고, 별도 입력 없이 즉시 생성할 수 있다.
UUID 생성하기
UUID 생성기에서 버튼 한 번이면 v4 UUID가 바로 나온다. 대량으로 필요하면 개수를 입력하고 일괄 생성할 수 있다. 최대 1,000개까지 한 번에 뽑을 수 있고, 텍스트 파일로 다운로드하는 것도 가능하다.
형식 옵션
- 기본 (하이픈 포함)
550e8400-e29b-41d4-a716-446655440000- 하이픈 제거
550e8400e29b41d4a716446655440000- 중괄호
{550e8400-e29b-41d4-a716-446655440000}— Windows COM/DCOM에서 GUID로 쓸 때- URN 형식
urn:uuid:550e8400-e29b-41d4-a716-446655440000— RFC 표준 문서에서 사용
실무에서 UUID를 쓰는 곳
- 데이터베이스 PK — 분산 시스템에서 서버 간 ID 충돌 방지
- 세션 ID — 사용자 세션을 고유하게 식별
- 파일명 — 업로드된 파일이 겹치지 않도록 UUID로 이름 부여
- API 요청 추적 — 각 요청에 UUID를 붙여 로그에서 추적
참고 UUID는 순서가 없어서 인덱스 성능이 자동 증가 ID보다 떨어질 수 있다. 대용량 테이블에서는 UUID v7(타임스탬프 기반 정렬 가능)이나 ULID를 고려하기도 한다.
고유 식별자가 필요할 때 UUID v4를 쓰면 대부분의 상황에서 충분하다. 코드 한 줄로도 생성할 수 있지만, 테스트용으로 여러 개가 한꺼번에 필요하면 온라인 도구가 더 빠르다.