본문 바로가기
  • 내가 궁금한 IT 및 기술관련 지식모음📂
프로그래밍

UUID(Universally Unique Identifier)란?, 범용 고유 식별자란?, 생성방법

by ※⊙ 2024. 5. 16.
반응형

UUID(Universally Unique Identifier) - 범용 고유 식별자

UUID는 128비트 길이의 숫자, 32자리의 16진수로 이루어진 값으로, 세상 어디에서도 중복되지 않는 유일한 고유의 값이다. 

 

네트워크상에서 서로 모르는 개체들을 식별하고 구별하기 위한 용도로 사용되며, 글로벌 표준 프로토콜인 rfc4122의 표준을 따른다. 쉽게 말해 중복되지 않는 고유의 값을 생성하여 네트워크 상에서 특정 개체들을 식별하고 구분할 수 있도록 하는 것이다.

 

하지만 완벽하게 고유한 값은 아니며, 1조 개의 UUID 중 중복이 발생될 확률은 10억 분의 1이다.

 

*rfc4122 - 네트워크 상에서 고유성이 보장되는 ID 및 값을 만드는 표준 규약, 프로토콜

 

 

 


형식

UUID는 다음과 같이 32개의 16진수 숫자가 하이픈으로 나누어진 형식으로 표현된다.

8자리 - 4자리 - 4자리 - 4자리 - 12자리 형식을 갖추고 있다.

 

XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

 

각 자리수는 다음과 같은 필드로 구분된다.

 

EX) 046c4cbe-6c10-478d-92c9-3d7bdbef4f0f

 

046c4cbe : time-low

6c10 : time-mid

478d : time-high-and-version

92c9 : clock-seq-hi-and-reserved & clock-seq-low

3d7bdbef4f0f : node

 

구분 길이(hex) 길이(byte) 길이(bit) 설명
time-low 8 4 32 시간의 low 32 비트를 부여하는 정수
time-mid 4 2 16 시간의 middle 16비트를 부여하는 정수
time-high-and-version 4 2 16 최상위 비트에서 4비트 UUID version,
시간의 hight 12비트
clock-seq-hi-and-reserved
& clock-seq-low
4 2 16 최상위 비트에서 1-3 비트는 UUID의 레이아웃 형식,
13-15비트 클럭 시퀀스
node 12 6 48 48비트 노드 id

 

 


 

UUID 버전

UUID는 총 5개의 버전으로 구분되며, 가장 많이 사용되는 버전은 4 버전이다.

 

- 1 ~ 2 버전 : 타임스탬프(Timestamp) 기준 UUID 생성

- 3 , 5 버전 : 네임스패이스(Namespace) 기준 UUID 생성

- 4 버전 :  랜덤값 UUID 생성, 빠른 생성가능 및 1~ 3, 5 버전과 달리 값의 생성을 유추할 수 없어 보안이 뛰어남

 

 

반응형

 


생성방법 및 사용

UUID는 개발언어 및 DBMS에서 사용할 수 있다.

 

- SQL Server (MS-SQL)

sql server에서는 newid() 함수를 사용하여 UUID를 생성할 수 있다.

 

SELECT newid() FROM DUAL ;

 

- Oracle

Oracle 에서는 두 가지 방법이 존재한다.

 

1. SYS_GUID() 함수를 사용하여 UUID를 생성

 

SELECT SYS_GUID() FROM DUAL ;

 

2. RAWTOHEX() 및 DBMS_RANDOM.UUID() 함수 사용하여 UUID를 생성

 

SELECT RAWTOHEX(DBMS_RANDOM.UUID()) AS uuid FROM DUAL;

 

- JAVA

자바에서는 UUID.randomUUid().toString(); 를 이용하여 UUID를 생성할 수 있다.

 

*JDK 1.5 이후부터 사용가능하다.

 

- C

C언어에서는 uuid/uuid.h 헤더파일을 추가하여 UUID를 생성할 수 있다.

 

#include <uuid/uuid.h>

 

int main () {

  uuid_t uuid;

  uuid_generate(uuid);

  

  char uuid_test[37];

  uuid_unparser(uuid, uuid_test, sizeof(uuid_test));

  

  return 0;

}

 

위 방법 말고도 각 언어별로 UUID를 생성할 수 있는 방법이 다양하기 때문에 본인에게 맞는 언어나 DBMS 환경을 고려하여 가장 알맞은 방법을 찾아서 사용하는 것이 좋겠다.

 

 

 

반응형

댓글