짧게 요약하면 네트워크 상에서 고유성이 보장되는 id를 만들기 위한 표준 규약이다. 이는 주로 분산 컴퓨팅 환경에서 사용되는 식별자인데, 중앙관리시스템이 있는 환경이라면 각 세션에 일련번호를 부여해줌으로써 유일성을 보장할 수 있지만, 중앙에서 관리되지 않는 분산 환경에 경우에는 개별 시스템이 id를 발급하더라도 유일성을 보장할 수는 없을 것이다.(동시발급 등의 문제) 이를 위해 탄생한 것이 범용 고유 식별자 UUID
이다.
UUID
는 128비트의 숫자로 이루어져 있으며, 32자리의 16진수로써 표현할 수 있다.
UUID
는 00000000-0000-0000-0000-000000000000 (8-4-4-4-12) 형식으로 표현한다.
예를들면 아래와 같이 표기할 수 있다.
1849ab2e-1e3a-d146-9851-19387969172
UUID
의 버전은 1, 3, 4, 5가 있다. 이중에서 가장 많이 쓰이는 것은 버전 1, 4라고 한다. 버전 1은 타임스탬프를 기준으로 생성되고, 버전 4는 랜덤으로 생성된다. 버전 3, 5는 해쉬함수를 이용하여 생성하는 방식이다.
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 생성
}),
);