front end/javascript

javascript에서 UUID 생성하는 방법

노루아부지 2022. 8. 4. 23:25
반응형

UUID란?

범용고유식별자(Universal Unique Identifier, UUID)는 어떤 개체(데이터)를 고유하게  식별하는 데 사용되는 표준입니다.

네트워크 상에서 서로 모르는 개체들을 식별하기 위해서는 각각의 고유한 이름이 필요합니다. 같은 이름을 갖는 개체가 존재한다면 구별이 불가능해지기 때문입니다.

이를 위하여 탄생한 것이 UUID이며 국제기구에서 표준(rfc4122)으로 정하고 있습니다.

UUID 표준에 따라 이름을 부여하면 고유성을 완벽하게 보장할 수는 없지만 실제 사용상에서 중복될 가능성이 거의 없다고 인정되기 때문에 많이 사용되고 있습니다.

 

UUID의 정의

16바이트(128비트) 길이의 숫자입니다. 이 숫자는 32개의 16진수로 구성되며, 5개의 그룹으로 표시되고 각 그룹은 하이픈으로 구분됩니다.

UUID는 다음과 같이 생겼습니다.

0bd6bdea-7cda-11ec-9f5d-51a692ab4461

이 UUID의 발생 가능한 경우의 수는 340,282,366,920,938,463,463,374,607,431,768,211,456개가 있습니다.

UUID는 다음과 같은 레코드 레이아웃에 기반을 둡니다.

이름 길이(바이트/비트) 내용
time_low 4 / 8 시간의 low 32비트를 부여하는 정수
time_mid 2 / 4 시간의 middle 16비트를 부여하는 정수
time_hi_and_version 2 / 4 최상위 비트에서 4비트 "version", 그리고 시간의 high 12비트
clock_seq_hi_and_res_clock_seq_low 2 / 4 최상위 비트에서 1-3비트는 UUID의 레이아웃형식, 그리고 13-15비트 클럭 시퀀스
node 6 / 12 48비트 노드 id

 

 

UUID 버전

UUID는 버전에 따라 생성하는 규칙이 다른데, 버전 5까지 있습니다.

  • 버전 1 (MAC 주소)
  • 버전 2 (DCE 보안)
  • 버전 3 (MD5 해시)
  • 버전 4 (랜덤)
  • 버전 5 (SHA-1 해시)

 

javascript에서 UUID 생성 방법

Math.random()을 사용한 UUID생성은 권장되지 않습니다.
따라서 다음과 같이 crypto를 사용하여 UUID를 생성해야 합니다.

자세한 내용은 여기에서 확인할 수 있습니다.

function uuidv4() {
  return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
    (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
  );
}

console.log(uuidv4());

 

또는 다음과 같이 간단하게 randomUUID()를 사용할 수도 있습니다.

자세한 내용은 여기에서 확인 가능합니다.

let uuid = self.crypto.randomUUID();
console.log(uuid);

 

getRandomValues()와 randomUUID()는 지원 브라우저가 다르기 때문에 지원하는 브라우저 버전을 확인 후 사용하는 것을 추천드립니다. 

 

 

[참고사이트]

 

https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid

https://ko.wikipedia.org/wiki/%EB%B2%94%EC%9A%A9_%EA%B3%A0%EC%9C%A0_%EC%8B%9D%EB%B3%84%EC%9E%90

 

728x90
반응형
loading