🏷️ UUID (Universally Unique Identifier)
이름 그대로 UUID는 전세계적으로 고유한 식별자이다.
이론상으로 중복될 가능성이 거의 없기 때문에 데이터베이스에서 고유한 값을 보장하는 데 매우 유용하게 사용된다.
- 128비트 길이의 값이다.
- 보통 8-4-4-4-12 형태의 36자 문자열로 표현된다. (ex. ``550e8400-e29b-41d4-a716-446655440000``)
▶︎ 장점
- 데이터의 고유성을 보장한다.
- 서버간 동기화 없이도 고유한 ID를 생성할 수 있으므로 분산 시스템에 적합하다.
▶︎ 단점
- 길이가 길어 저장 공간을 많이 차지한다. (128비트 = 16바이트 = 문자열로 36자)
- DB에서 인덱싱 효율이 낮을 수 있다.
- UUID는 무작위성을 기반으로 생성되기 때문에 순차적인 값이 아니다.
- 인덱스는 일반적으로 값의 순차적인 증가를 기반으로 최적화되어 있기 때문에 UUID를 기본 키로 사용하는 경우 인덱싱 전략을 고려해보아야 한다.
어떻게 전세계적인 고유성을 보장할 수 있을까?
- UUID는 128비트 숫자이다.
- 가능한 조합의 수는 ``2^128``
- 이 숫자는 약 ``3.4 * 10^38``으로, (1조*1조*1조*340개)의 조합이다.
- 완전히 무작위가 아니라, 충돌이 거의 없도록 설계된 알고리즘을 따른다.
- UUID에도 여러 버전이 있는데 v1, v7 에서는 랜덤성 + 시간 정보 + 기기 정보를 함께 사용해서 생성한다.
- 즉, 충분히 많은 비트 수 + 고유성을 극대화하는 비트 조합 방식을 통해 전세계적인 고유성을 보장한다.
- 충분히 많은 많은 비트 수로 인해 가능한 조합의 수 자체가 많다.
- 충돌이 없을 만한 정보들을 조합하여 중복 가능성이 더욱 낮게 설계되어 있다.
Java에서는 `java.util.UUID`로 UUID를 생성하고 사용할 수 있다.
🔗 Reference
'공부하기 > ETC' 카테고리의 다른 글
| RAG와 벡터 데이터베이스 (0) | 2026.01.14 |
|---|---|
| 실시간 데이터 전송 기술 정리 | Polling, Long-Polling, SSE, WebSocket (1) | 2025.04.18 |
| JWT 찐하게 이해하기 👀 | JWT 구성과 인증 원리 (0) | 2025.03.13 |
| Servlet 이해하기 (Web Server, WAS, Servlet) (0) | 2025.01.22 |
| 도메인 로직(Domain Login)이 뭔데? (2) | 2024.11.11 |