티스토리 뷰

 

UUID는 Universally Unique IDentifier의 약자로, 전세계에 하나밖에 없는 ID라는 뜻입니다. 이런 ID는 고유하기 때문에 서버에서 사용자들에 UUID를 붙여서 구분하는 등 여러 방면에서 유용하게 쓰일 수 있습니다.

 

 

UUID가 겹치면 어쩌지?

이 글은 koreanhole 님의 글입니다. Intro 최근 UOS공지사항 앱의 백엔드 시스템을 교체하는 작업을 하고 있습니다. 기존 Firebase의 Firestore를 사용하고 있었는데 이번에 새롭게 Nestjs로 서버를 작성하는

kingofbackend.tistory.com

 

설치

$ npm install uuid 

uuid 라이브러리를 install 합니다.


종류

UUID는 여러 가지 방식으로 생성 가능합니다.

v1: 타임스탬프(시간) 기준으로 생성

v3: MD5 해시 기준으로 생성

v4: 랜덤값을 기반으로 생성

v5: SHA-1 해시 기준으로 생성

 


 

v1 (타임스탬프 기반) UUID 생성

v1 같은 경우 현재 시각을 기반으로 uuid 값을 생성하는데 uuid가 생성된 시각과 MAC주소로 uuid를 유추할 수 있기 때문에 안전하지 않다고 합니다.

import { v1 } from 'uuid';

//기본 설정으로 생성
console.log(v1());

//설정을 붙여서 생성
let options = {
    node: // 바이트값 6개
    clockseq: // 클럭 시퀀스 (0 - 0x3fff 사이 값)
    msecs: // 밀리초
    nsecs: // 나노초
    random: // 16개의 랜덤 바이트값
    rng: // random 변수를 대체할 16개의 랜덤 바이트값을 반환하는 함수
}

console.log(v1(options));

v3 (MD5 기반) UUID 생성

RFC 표준에 따르면 하위호환 같은 사유가 아니라면 v3보다는 v5를 추천한다고 합니다.

import { v3 } from 'uuid';

//v5는 네임스페이스라는 값과 해싱할 값으로 UUID를 만든다.
//그래서 네임스페이스로 사용할 UUID 값이 필요하다.
console.log(v3('해싱할 값', '1a30bae5-e589-47b1-9e77-a7da2cdbc2b8'));

//해싱할 값이 URL이나 도메인인 경우 미리 만들어진 네임스페이스를 활용하면 된다.
//해싱할 값이 도메인인 경우
console.log(v3('www.google.com'), v3.DNS);

//해싱할 값이 URL인 경우
console.log(v3('https://www.google.com'), v3.URL);

v4 (랜덤값 기반) UUID 생성

import { v4 } from 'uuid';

//기본 설정으로 생성
console.log(v4());

//설정을 붙여서 생성
let options = {
    random: // 16개의 랜덤 바이트값
    rng: // random 변수를 대체할 16개의 랜덤 바이트값을 반환하는 함수
}
console.log(v4(options));

v5 (SHA-1 기반) UUID 생성

import { v5 } from 'uuid';

//v5는 네임스페이스라는 값과 해싱할 값으로 UUID를 만든다.
//그래서 네임스페이스로 사용할 UUID 값이 필요하다.
console.log(v5('해싱할 값', '1a30bae5-e589-47b1-9e77-a7da2cdbc2b8'));

//해싱할 값이 URL이나 도메인인 경우 미리 만들어진 네임스페이스를 활용하면 된다.
//해싱할 값이 도메인인 경우
console.log(v5('www.google.com'), v5.DNS);

//해싱할 값이 URL인 경우
console.log(v5('https://www.google.com'), v5.URL);

 

 

 

 

Node.js 유용한 라이브러리 - uuid

UUID는 Universally Unique IDentifier의 약자로, 전세계에 하나밖에 없는 ID라는 뜻이다. 이런 ID는 고유하기 때문에 서버에서 사용자들에 UUID를 붙여서 구분하는 등 여러 방면에서 유용하게 쓰일 수 있다.

fred16157.github.io

 

댓글
댓글쓰기 폼
공지사항
Total
248,427
Today
802
Yesterday
1,065
링크
«   2022/10   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함