[CS] UUID

gyeol·2025년 10월 27일

CS

목록 보기
11/13
post-thumbnail

UUID(Universally Unique Identifier)

UUID는 소프트웨어 구축에 사용되는 128비트 길이의 표준 식별자이다. 중앙 시스템의 관리 없이도 고유성이 보장되도록 설계되었다는 것이 큰 특징이다.

  • 고유성 보장
    128비트의 매우 긴 길이때문에 생성 가능한 개수가 2^128개에 달하기에 중복될 확률은 거의 0에 가깝다.

  • 분산 환경 적합
    중앙 서버에 의존하지 않고 독립적으로 ID를 생성할 수 있기에 네트워크, 데이터베이스 등 분산 시스템에 유용하다.

UUID 구조와 표현

UUID는 128비트의 숫자이며 보통 32자리의 16진수와 4개의 하이픈(-)으로 구성된 문자열 형태로 표현된다.

필드사이즈설명
time-low4hexOctet / 32bit타임스탬프의 low field
time-mid2hexOctet / 16bit타임스탬프의 mid field
time-high-and-version2hexOctet / 16bit타임스탬프의 high field & UUID 버전
clock-seq-hi-and-reservedhexOctet / 8bit클락 시퀀스의 high field & variant
clock-seq-lowhexOctet / 8bit클락 시퀀스의 low field
node6hexOctet / 48bitnode 식별자
  • xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

  • 세번째 그룹의 M은 UUID의 버전을 나타낸다

  • 네번째 그룹의 N은 변종 정보를 포함한다.
    ex) a1b2c3d4-e5f6-**4**001-**8**002-9a0b1c2d3e4f

    • 버전: 4, 변종 : RFC 4122/DCE Security 변종

UUID의 주요 버전

UUID는 여러 생성 방식에 따라 버전이 나뉘며 사용 목적에 따라 적합한 버전을 선택할 수 있다. 자주 사용되는 버전은 V1, V3, V4, V5, V7이다.

버전생성 방식특징사용 예시
V1시간(Timestamp)과 MAC 주소 기반- 생성 시점과 장치 정보 포함.
- 고유성은 확실하지만, MAC 주소 노출로 보안에 취약할 수 있음.
- 시간 순서 정렬이 용이.
초기 분산 시스템
V3MD5 해시 기반 (이름 및 네임스페이스)- 동일 입력에 대해 항상 동일한 UUID 생성.
- 결정론적.
네임스페이스 기반의 고정된 ID 필요 시 (예: URL)
V4랜덤(Random) 값 기반- 대부분의 비트가 무작위 값으로 채워짐. 가장 널리 사용됨.
- 생성 속도가 빠르고, 외부 정보 노출이 없어 보안성이 높음.
- 시간 순서 정렬 불가.
범용적인 고유 식별자 (DB 기본 키 등)
V5SHA-1 해시 기반 (이름 및 네임스페이스)V3와 유사하나, 더 강력한 SHA-1 해시 사용.V3와 동일 목적이지만 더 높은 보안성 요구 시
V7밀리초 정밀도 타임스탬프와 랜덤 데이터 결합- V1의 단점을 개선하여 정렬 가능하면서도 분산 시스템에 최적화.
- 데이터베이스 키로 사용하기에 매우 적합함.
최신 분산 시스템의 시간 기반 키

UUID 생성 방법

대부분의 언어는 UUID 라이브러리를 지원한다.

Java

UUID 클래스를 사용하면 된다.

import java.util.UUID;
UUID.randomUUID().toString() 

randomUUID()를 호출하면 버전 4 UUID 값을 가진 객체가 반환된다.

JavaScript

자바스크립트의 경우 uuid npm 패키지를 설치해야 한다.

npm install uuid 

설치 후에 필요한 버전의 UUID 메소드를 호출하면 된다.

import { v4 as uuidv4 } from 'uuid';
uuidv4(); 

Python

파이썬도 UUID 라이브러리를 사용할 수 있다. 이때 각 버전을 생성할 수 있는 메소드를 지원한다.

import uuid
uuid.uuid4() 
profile
공부 기록 공간 '◡'

0개의 댓글