UUID는 16바이트(128비트) 형태의 구조를 가지며 하나의 UUID 길이는 36자리이며 “4개의 하이픈(-)”과 “32개의 16진수 문자열”로 구성
| 이름 | 길이(byte) | 길이(hex) | 길이(bits) | 내용 |
|---|---|---|---|---|
| time_low | 4 | 8 | 32 | 시간의 low 32비트를 부여하는 정수 |
| time_mid | 2 | 4 | 16 | 시간의 middle 16비트를 부여하는 정수 |
| time_hi_and_version | 2 | 4 | 16 | 최상위 비트에서 4비트 "version", 그리고 시간의 high 12비트 |
| clock_seq_hi_and_res clock_seq_low | 2 | 4 | 16 | 최상위 비트에서 1-3비트는 UUID의 레이아웃형식, 그리고 13-15비트 클럭 시퀀스 |
| node | 6 | 12 | 48 | 48비트 노드 id |
| 버전 | 생성 기반 | 설명 | |
|---|---|---|---|
| 버전 1 | 현재 시간과 랜덤한 MAC 주소를 기반으로 생성 | 유일성이 보장되지만 보안에 취약 | |
| 버전 2 | 버전 1과 유사, 시퀀스 번호 대신 POSIX UID(사용자 식별자)를 사용하여 생성 | 현재는 거의 사용하지 않는 버전 | |
| 버전 3 | MD5 해시를 기반으로 이름과 네임스페이스에 대한 조합으로 생성 | 이름과 네임스페이스가 같으면 동일한 UUID가 생성 | |
| 버전 4 | 랜덤한 값을 기반으로 생성 | 보안성이 높고 생성속도가 빠름 | |
| 버전 5 | 버전 3과 유사, SHA-1 해시를 사용하여 생성 | SHA-1 해시에 대해서 보안 취약점이 발견이 되었다는 단점 |
npm install uuid
import { v4 as uuidv4 } from 'uuid';
uuidv4();
| API | 설명 | 도입 시기 |
|---|---|---|
| uuid.NIL | 빈 UUID 문자열 (전부 0) | uuid@8.3 |
| uuid.parse() | UUID 문자열을 byte 배열로 변환 | uuid@8.3 |
| uuid.stringify() | byte 배열을 UUID 문자열로 변환 | uuid@8.3 |
| uuid.v1() | version 1(timestamp) UUID를 만듦 | |
| uuid.v3() | version 3 (namespace w/ MD5) UUID를 만듦 | |
| uuid.v4() | version 4 (random) UUID를 만듦 | |
| uuid.v5() | version 5 (namespace w/ SHA-1) UUID를 만듦 | |
| uuid.validate() | 문자열이 유효한 UUID인지 테스트 | uuid@8.3 |
| uuid.version() | UUID의 RFC 버전 감지 | uuid@8.3 |