#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 생성
}),
);