# TIL: UUID 버전 및 사용 시기

> Clean Markdown view of GeekNews topic #16484. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16484](https://news.hada.io/topic?id=16484)
- GeekNews Markdown: [https://news.hada.io/topic/16484.md](https://news.hada.io/topic/16484.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-27T10:00:43+09:00
- Updated: 2024-08-27T10:00:43+09:00
- Original source: [ntietz.com](https://ntietz.com/blog/til-uses-for-the-different-uuid-versions/)
- Points: 3
- Comments: 1

## Topic Body

- **UUID의 다양한 버전**
  - UUID Version 1 (v1): 타임스탬프, 단조 카운터, MAC 주소로 생성됨
  - UUID Version 2 (v2): 보안 ID에 예약됨. 자세한 내용은 알려지지 않음
  - UUID Version 3 (v3): 제공된 데이터의 MD5 해시로 생성됨. DNS와 URL이 후보 데이터로 제안됨
  - UUID Version 4 (v4): 완전히 랜덤한 데이터로 생성됨. 대부분 사람들이 생각하는 UUID임
  - UUID Version 5 (v5): 제공된 데이터의 SHA1 해시로 생성됨. v3와 마찬가지로 DNS와 URL이 후보 데이터로 제안됨
  - UUID Version 6 (v6): 타임스탬프, 단조 카운터, MAC 주소로 생성됨. v1과 동일한 데이터지만 생성 시간 순으로 정렬되도록 순서가 변경됨
  - UUID Version 7 (v7): 타임스탬프와 랜덤 데이터로 생성됨
  - UUID Version 8 (v8): 완전히 사용자 정의 가능함 (필수 버전/변형 필드 제외)

- **사용 시기**
  - v4: 랜덤 ID가 필요할 때 사용. 기본 선택으로 좋음
  - v7: 정렬이 필요한 경우 사용. 예를 들어, 데이터베이스 키로 사용할 때 적합함
  - v5 또는 v8: 고유 데이터를 UUID에 포함하고 싶을 때 사용. 필요 시 알게 될 것임

- **다른 버전들에 대한 설명**
  - v7은 v1과 v6을 개선한 버전으로, 가능하면 v7을 사용하는 것이 좋음. 따라서 v1이나 v6은 보통 사용하지 않음
  - v2는 보안 관련 용도로 예약되어 있음. 사용 중이라면 자세한 내용을 알 수 없을 가능성이 큼
  - v3는 v5로 대체됨. v5는 더 강력한 해시를 사용함

### GN⁺의 정리
- UUID는 다양한 버전이 있으며, 각 버전은 특정한 용도에 맞게 설계됨
- v4와 v7이 가장 일반적으로 사용되며, v5와 v8은 특정한 데이터 요구 사항이 있을 때 사용됨
- UUID의 버전 선택은 사용 목적에 따라 달라지며, 정렬이 필요한 경우 v7을, 랜덤 ID가 필요한 경우 v4를 사용하면 좋음
- UUID의 다양한 버전을 이해하면 프로젝트에 적합한 UUID를 선택하는 데 도움이 됨

## Comments



### Comment 28337

- Author: neo
- Created: 2024-08-27T10:00:43+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41350225) 
- UUID Version 2 (v2)는 보안 ID를 위해 예약되어 있으며, 자세한 내용은 잘 알려져 있지 않음
  - RFC 문서가 불명확하게 작성되었기 때문임
  - Open Group의 문서를 참조하면 더 많은 정보를 얻을 수 있음
  - "version 0" UUID도 존재하며, 이는 나중에 다른 버전들이 호환되도록 하는 데 기여했음
  - 연구 결과는 GitHub에서 확인할 수 있음

- UUID v2의 세부 사항은 RFC 9562 문서에서 쉽게 찾을 수 있음
  - DCE의 일부로 정의되어 있으며, 관련 링크를 클릭하면 세부 사항을 확인할 수 있음
  - 링크를 클릭하는 것이 중요함

- UUID v7의 타임스탬프는 Databend에서 메타데이터 파일을 빠르게 찾는 데 유용함
  - AWS S3에서의 작업 속도를 크게 향상시킴
  - 관련 PR은 GitHub에서 확인할 수 있음

- 짧은 UUID에 대한 표준이 있었으면 좋겠음
  - 예: `73WakrfVbNJBaAmhQtEeDv` 또는 `bK7nP9xM`
  - 짧고 기억하기 쉬운 ID가 필요함

- UUID2의 목적을 이해하기 어려움
  - Xandr에서 개인 데이터를 삭제 요청할 때만 UUID2를 접했음
  - Wikipedia 페이지를 읽어도 왜 다양한 유형의 UUID가 필요한지 이해하기 어려움
  - Mac 코드와의 혼합이 UUID2의 무작위성을 높이는 이유인지, 아니면 다른 이유가 있는지 궁금함
  - 프라이버시를 위해 매우 긴 식별자를 사용하면 중복되지 않는 UUID를 사용할 수 있음

- UUID v4는 단순히 무작위 바이트 생성기임
  - 하이픈, 버전 정보 등을 생략하고 무작위 바이트를 생성하는 것이 더 효율적임

- MAC 기반 버전은 사용하지 않는 것이 좋음
  - 이론적으로 v4와 v7을 제외한 모든 버전이 해당됨
  - 특히 v1은 최악이며, v3의 MD5도 매우 취약함

- SHA256 데이터와 카운터를 사용하는 UUID가 유용할 수 있음
  - PBKDF2와 유사한 방식으로 프라이버시를 보호하는 식별자로 사용할 수 있음

- v7을 사용하는 것이 좋음
  - 보안 전문가들이 반대할 수도 있음

- 흥미로운 읽을거리였음
  - 매일 새로운 것을 배울 수 있음
