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 환경을 고려하여 가장 알맞은 방법을 찾아서 사용하는 것이 좋겠다.
'프로그래밍' 카테고리의 다른 글
데이터베이스(DB)란?, DB와 DBMS 차이, SQL이란 (0) | 2024.05.26 |
---|---|
인터프리터 컴파일러 차이, 어셈블리어란? (0) | 2024.04.28 |
자바(Java)와 자바스크립트(JavaScript) 차이, 이름이 비슷한 이유? (0) | 2024.04.24 |
프론트엔드(Front-end), 백엔드(Back-end) 차이점 (1) | 2024.04.24 |
댓글