[TIL] UUID란?

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

by Husky

Jan 2, 2020 | 2 min read

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 함수를 제공하면 된다.

 1  const session = require('express-session');
 2  const connectRedis = require('connect-redis');
 3  const redis = require('redis');
 4  const uuidv4 = require('uuid/v4');
 5  const next = require('next');
 6
 7  let RedisStore = connectRedis(session);
 8  let redisClient = redis.createClient(6379, process.env.REDIS_CLIENT);
 9
10  // 기타 express 관련 설정 생략...
11
12  app.use(
13    session({
14      store: new RedisStore({ client: redisClient }),
15      secret: process.env.SESSION_SECRET,
16      resave: true, // 수정된 적 없는 세션이라도 한번 발급된 세션은 저장 허용. 경쟁조건을 일으킬 수 있음
17      rolling: true, // 새로고침이 발생할 때마다 세션 refresh
18      saveUninitialized: true, // 초기화되지 않은 세션, 생성되었으나 한번도 수정되지 않은 세션을 저장할 것인지
19      cookie: {
20        maxAge: 60 * 60 * 1000,
21      },
22      genid: uuidv4, // UUIDv4를 이용해 session id 생성
23    }),
24  );

참고