Funes Days

UUID란?

범용고유식별자 UUID에 대해 알아봅시다

published at: 2020-01-02

til

UUID란?

1줄 요약: 네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약.

조금 더 길게

개요

주로 분산 컴퓨팅 환경에서 사용되는 식별자이다. 중앙관리시스템이 있는 환경이라면 각 세션에 일련번호를 부여해줌으로써 유일성을 보장할 수 있겠지만 중앙에서 관리되지 않는 분산 환경이라면 개별 시스템이 id를 발급하더라도 유일성이 보장되어야만 할 것이다. 이를 위해 탄생한 것이 범용고유식별자 UUID (Universally Unique IDentifier) 이다.

정의

UUID는 128비트의 숫자이며, 32자리의 16진수로 표현된다. 여기에 8-4-4-4-12 글자마다 하이픈을 집어넣어 5개의 그룹으로 구분한다.

예: 550e8400-e29b-41d4-a716-446655440000
종류

UUID 버전은 1, 3, 4 및 5가 있다. 이 중 많이 쓰이는 것은 버전 1과 4이다. 버전 1은 타임스탬프를 기준으로 생성되며, 버전 4는 랜덤 생성이다. 버전 3, 5는 각각 MD5, SHA-1 해쉬를 이용해 생성하는 방식이다.

쓰임새

다음 패키지를 이용하면 Node 환경에서 손쉽게 UUID를 사용할 수 있다.

kelektiv/node-uuid: Generate RFC-compliant UUIDs in JavaScript

세션 ID를 발급해야 할 때, uuid 함수를 제공하면 된다.

const session = require('express-session');
const connectRedis = require('connect-redis');
const redis = require('redis');
const uuidv4 = require('uuid/v4');
const next = require('next');

let RedisStore = connectRedis(session);
let redisClient = redis.createClient(6379, process.env.REDIS_CLIENT);

// 기타 express 관련 설정 생략...

app.use(
  session({
    store: new RedisStore({ client: redisClient }),
    secret: process.env.SESSION_SECRET,
    resave: true, // 수정된 적 없는 세션이라도 한번 발급된 세션은 저장 허용. 경쟁조건을 일으킬 수 있음
    rolling: true, // 새로고침이 발생할 때마다 세션 refresh
    saveUninitialized: true, // 초기화되지 않은 세션, 생성되었으나 한번도 수정되지 않은 세션을 저장할 것인지
    cookie: {
      maxAge: 60 * 60 * 1000,
    },
    genid: uuidv4, // UUIDv4를 이용해 session id 생성
  }),
);

참고

범용 고유 식별자 - 위키백과, 우리 모두의 백과사전

uuid — RFC 4122 에 따른 UUID 객체 — Python 3.8.1 문서

[iOS, Swift] UUID는 어떤 원리로 만들어지는 것일까.. - Clint Jang - Medium