경고: 이 문서의 오래된 판을 편집하고 있습니다. 이것을 게시하면, 이 판 이후로 바뀐 모든 편집이 사라집니다.귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 개요 == UUID(Universally Unique Identifier)는 전 세계적으로 고유한 식별자를 만들기 위해 고안된 128비트 표준 식별자이다. 2005년의 RFC 4122가 2024년 5월 발표된 '''RFC 9562'''로 대체되며, 최신 규격에서 버전 6 · 7 · 8이 정식 표준에 포함되었다.:contentReference[oaicite:0]{index=0} UUID는 32자리 16진수 숫자를 <code>8-4-4-4-12</code> 형식으로 하이픈으로 구분하여 표현한다. 예) <code>123e4567-e89b-12d3-a456-426614174000</code>. 버전 7은 밀리초 단위 Unix 타임스탬프를 상위 48비트에 포함해 시간 순 정렬성을 대폭 향상시켰다.:contentReference[oaicite:1]{index=1} == 장단점 == === 장점 === * '''전 세계적 고유성''': 분산 환경에서도 중복 없이 고유한 식별자를 생성할 수 있다.:contentReference[oaicite:2]{index=2} * '''충돌 가능성 낮음''': 2<sup>122</sup> (≈5.3 × 10<sup>36</sup>)개의 조합으로 충돌 확률이 극히 낮다.:contentReference[oaicite:3]{index=3} * '''독립성''': 중앙 서버와 통신하지 않아도 식별자를 만들 수 있다. * '''범용성''': 대부분의 언어·플랫폼에서 기본 또는 외부 라이브러리로 지원한다.:contentReference[oaicite:4]{index=4} * '''정렬성 향상''': 버전 6·7은 시간 정보를 앞부분에 배치해 인덱스 지역성 문제를 완화한다.:contentReference[oaicite:5]{index=5} === 단점 === * '''크기''': 16바이트이므로 대규모 DB 인덱스에는 부담이 될 수 있다.:contentReference[oaicite:6]{index=6} * '''가독성''': 사람이 읽고 기억하기엔 복잡하다. * '''정렬''': 난수 기반인 버전 4는 생성 순서가 무작위라 B-tree 인덱스 파편화가 심하다.:contentReference[oaicite:7]{index=7} * '''보안''': 버전 1은 MAC 주소·시간 정보가 노출될 수 있다.:contentReference[oaicite:8]{index=8} == 특징 == * '''고유성''': 전 세계적으로 유일하다. * '''확장성''': 네트워크 상태와 무관하게 생성 가능. * '''독립적 생성''': 중앙 서버 없이 분산 환경에서 사용 가능. * '''표준화''': RFC 9562로 상호 운용성 보장.:contentReference[oaicite:9]{index=9} * '''다양한 버전''': 1 ~ 8 버전이 존재하며 용도별로 선택할 수 있다.:contentReference[oaicite:10]{index=10} * '''풍부한 라이브러리''': Python·Go·JavaScript 등에서 모듈 또는 패키지 형태로 제공된다.:contentReference[oaicite:11]{index=11} == UUID의 버전 == * '''버전 1 (타임스탬프 + MAC)''': 시간·MAC 기반, 개인 정보 노출 우려.:contentReference[oaicite:12]{index=12} * '''버전 2 (DCE 보안)''': POSIX UID/GID 포함, 실무 사용 거의 없음. * '''버전 3 (이름 기반 + MD5)''': 동일 입력에 동일 UUID 보장. * '''버전 4 (난수 기반)''': 가장 널리 쓰이며 충돌 확률 매우 낮음.:contentReference[oaicite:13]{index=13} * '''버전 5 (이름 기반 + SHA-1)''': v3과 같으나 해시 알고리즘만 SHA-1.:contentReference[oaicite:14]{index=14} * '''버전 6 (시간순 정렬 강화)''': v1의 한계를 보완해 상위비트에 big-endian 시간값 배치.:contentReference[oaicite:15]{index=15} * '''버전 7 (Unix 에포크 밀리초)''': 48비트 타임스탬프 + 74비트 난수, 인덱스 친화적.:contentReference[oaicite:16]{index=16} * '''버전 8 (사용자 정의)''': 응용 프로그램이 의미를 정의하는 커스텀 UUID.:contentReference[oaicite:17]{index=17} == 주요 구현 및 채택 현황 == * '''PostgreSQL''' — <code>uuid_generate_v7()</code> 함수를 제공하는 확장 <code>pg_uuidv7</code>.:contentReference[oaicite:18]{index=18} * '''Python''' — 표준 라이브러리는 v1·3·4·5만 지원하며, v7 추가 제안이 진행 중이다.:contentReference[oaicite:19]{index=19} * '''Go''' — <code>github.com/google/uuid</code> 및 <code>flexstack/uuid</code> 등이 v7을 지원한다.:contentReference[oaicite:20]{index=20} * '''Java''' — 표준 <code>java.util.UUID</code>는 v7을 아직 포함하지 않아 커뮤니티 논의가 활발하다.:contentReference[oaicite:21]{index=21} * '''DuckDB''' — 1.3.0에서 v7 지원을 추가했으나 타임스탬프 호환성 이슈가 보고되었다.:contentReference[oaicite:22]{index=22} * 기타 언어들도 외부 라이브러리 형태로 빠르게 v7을 채택 중이다.:contentReference[oaicite:23]{index=23} == 충돌 확률 == 버전 4·6·7·8 모두 122비트 이상의 무작위 엔트로피를 갖는다. 초당 10억 개의 UUID를 100년간 생성해도 50% 충돌 확률에 도달하지 않는다.:contentReference[oaicite:24]{index=24} == 결론 == UUID는 여전히 분산 시스템에서 사실상 표준 식별자이며, RFC 9562 채택으로 버전 6·7·8이 공식화되어 정렬성과 활용성이 크게 개선되었다. 각 상황에 맞는 버전을 선택해 사용하면, 충돌 위험을 최소화하면서도 성능·보안·정렬성 요구 사항을 충족할 수 있다. 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)