uuid

webDev5·2024년 2월 26일

패키지

목록 보기
2/3

개요

  • 범용 고유 식별자, UUID(Universally Unique IDentifier)
  • 컴퓨터 시스템은 매우 큰 난수를 사용해 로컬에서 UUID를 생성
  • 이론적으로 ID는 전역적으로 고유하지 않을 수 있지만, 중복 가능성은 거의 없음
  • 중복 가능성 : 2의 122승분의 1
  • 주로 세션 식별자, 쿠키값, 무작위 데이터베이스 키 등에 사용

구조

  • UUID는 16바이트(128비트) 형태의 구조를 가지며 하나의 UUID 길이는 36자리이며 “4개의 하이픈(-)”과 “32개의 16진수 문자열”로 구성

    예시

    • Time-based UUID
    • XXXXXXXX(time_low)-XXXX(time_mid)-XXXX(time_hi_and_version)-XXXX(clock_seq_hi_and_res clock_seq_low)-XXXXXXXXXXXXXXXX(node)
    이름길이(byte)길이(hex)길이(bits)내용
    time_low4832시간의 low 32비트를 부여하는 정수
    time_mid2416시간의 middle 16비트를 부여하는 정수
    time_hi_and_version2416최상위 비트에서 4비트 "version", 그리고 시간의 high 12비트
    clock_seq_hi_and_res clock_seq_low2416최상위 비트에서 1-3비트는 UUID의 레이아웃형식, 그리고 13-15비트 클럭 시퀀스
    node6124848비트 노드 id

버전

버전생성 기반설명
버전 1현재 시간과 랜덤한 MAC 주소를 기반으로 생성유일성이 보장되지만 보안에 취약
버전 2버전 1과 유사, 시퀀스 번호 대신 POSIX UID(사용자 식별자)를 사용하여 생성현재는 거의 사용하지 않는 버전
버전 3MD5 해시를 기반으로 이름과 네임스페이스에 대한 조합으로 생성이름과 네임스페이스가 같으면 동일한 UUID가 생성
버전 4랜덤한 값을 기반으로 생성보안성이 높고 생성속도가 빠름
버전 5버전 3과 유사, SHA-1 해시를 사용하여 생성SHA-1 해시에 대해서 보안 취약점이 발견이 되었다는 단점
  • 주로 버전 4를 많이 사용

장점

  • 환경에 독릭접 (플랫폼, 개발 환경 등에 대해 독립적)
  • 분산 지원 가능 (중앙 관리자가 각자의 시스템에 할당 가능 )

단점

  • 의미적으로 알아보기 어려움
  • 정렬이 어려움 (데이터들을 정렬하기 위해서는 별도의 알고리즘 필요)
  • 크기가 큼 (메모리를 많이 차지)

설치

npm install uuid

예시

UUID 생성 (ES6 module syntax)

import { v4 as uuidv4 } from 'uuid';
uuidv4();

API 요약

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

출처

profile
공부한 내용을 정리하는 블로그입니다.

0개의 댓글