UUID란 ?
범용 고유 식별자라는 뜻으로 네트워크상에서 중복되지 않는 ID를 만들기 위한 표준 규약이다.
128비트 길이의 값으로 표현되는 식별자로, 전 세계적으로 고유하게 유지되도록 설계되었다.
UUID의 구성
UUID는 하이픈(-)으로 구분된 36자리의 16진수 숫자로 표현된다.
123e4567-e89b-12d3-a456-426655440000
UUID의 사용 용도
- 데이터베이스의 레코드 식별자
- 세션 식별자
- 파일 이름
- 객체 식별자
- 소프트웨어 구성 요소 식별자
나는 S3에 사진을 저장할 때 이름의 중복을 피하고자 이용하게 됐다.
UUID의 장점
- 고유성 : 전 세계적으로 고유한 값을 보장
- 분산성 : 중앙 등록 기관 없이 생성이 가능
- 무작위성 : 충돌 가능성이 매우 낮음
- 간단성 : 생성 및 사용이 비교적 간단
UUID의 구성 깊게 보기
위와 같이 UUID는 5개의 필드로 구성된다.
- time_low (4바이트)
- UUID가 생성된 시간의 하위 32비트
- 16진수 표현 - time_mid (2바이트)
- UUID가 생성된 시간의 중간 16비트
- 16진수 표현 - time_hi_and_version (2바이트)
- UUID가 생성된 시간의 상위 12비트와 UUID 버전을 나타냄
- 상위 4비트는 UUID의 버전 (가장 많이 사용되는 것은 [1] 타임스탬프 기반과 [4] 랜덤 생성)
- 하위 12비트는 시간의 상위 12비트
- 16진수 표현 - clock_seq_hi_and_res (2바이트)
- UUID를 생성한 시스템 클럭의 시퀀스 번호의 상위 3비트와 예약된 3비트
- 상위 3비트는 시퀀스 번호의 상위 3비트
- 하위 3비트는 예약된 비트
- 16진수 표현 - node (6바이트)
- UUID를 생성한 시스템의 고유 식별자
- 48비트로 표현
- MAC 주소와 같은 네트워크 어드레스로 생성되거나 임의로 생성 됨
UUID 레코드 레이아웃 예시
- 123e4567은 time_low 필드
- e89b는 time_mid 필드
- 12d3는 time_hi_and_version 필드
(상위 4비트 > 버전)
(하위 12비트 time_hi 필드)
- a456은 clock_seq_hi_and_res 필드
(상위 3비트 > 시퀀스 번호의 상위 3비트)
(하위 3비트 > 예약된 비트)
- 426655440000은 node 필드