โ ์ํํธ์จ์ด ์ ์์ฌ๋ค์ ์ํํธ์จ์ด๋ฅผ ๋์ฑ โ์ฌ์ฉ์ ์นํ์ โ์ผ๋ก ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ๋ค.
ํ์ง๋ง, ๊ฐ์ฅ ์ํ ์ผ์ ๋ธ๋ก์ ์ โ์ฌ์ฉ์ ์นํ์ โ ์ด๋ผ๊ณ ๋๊ทธ๋ผ๋ฏธ ์น ๊ฒ์ด๋ค. โ- Bill Gates
MS์ ์ฐฝ๋ฆฝ์

UUID ๋?
UUID๋ Universally Unique IDentifier์ ์ฝ์๋ก, ์ ์ธ๊ณ์ ํ๋๋ฐ์ ์๋ ID๋ผ๋ ๋ป์ด๋ค.
์ด๋ฐ ID๋ ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ ์ฌ์ฉ์๋ค์ UUID๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ถํ๋ ๋ฑ ์ฌ๋ฌ ๋ฐฉ๋ฉด์์ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์๋ค.
์๋ฅผ๋ค์ด, DB๋ฅผ ๋ค๋ฃฐ ๋ PK๋ฅผ ์ฃผ๋ก auto increment ๊ฐ์ผ๋ก ์ฌ์ฉํ์ง๋ง, URL์ด๋ ํ๋ฉด์์ ๋ ธ์ถ ์ํค๋ฉด ํฌ๋กค๋ง์ด๋ ์ธ์ ์ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ด ์๋ค.
๋๋ฌธ์ publicํ ํ๋ฉด๋จ์์๋ ramdom ํ UUID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ ํธ์ด๋ค.
UUID๋ 16์ง์ 8์๋ฆฌ-4์๋ฆฌ-4์๋ฆฌ-4์๋ฆฌ-12์๋ฆฌ ํจํด์ผ๋ก ํํ๋๋ค.
// UUID ํจํด ์์
1604b772-adc0-4212-8a90-81186c57f598
UUID๋ก ํํํ ์ ์๋ ๊ฐ์ฒด์ ๊ฐฏ์๋ ์ต๋ 340,282,366,920,938,463,463,374,607,431,768,211,456๊ฐ ์ด๋ฉฐ,
์ค๋ณต๋ ํ๋ฅ ์ด ๋ก๋์ ์ฐ์์ผ๋ก ๋๋ฒ 1๋ฑ์ผ๋ก ๋น์ฒจ๋ ํ๋ฅ ๋ณด๋ค ๋ฎ๋ค๊ณ ํ๋ ๊ฐ์ด ๊ฒน์น๋ ๊ฑฑ์ ์ ์ํด๋ ๋๋ค.
UUID ๋ชจ๋
๋ชจ๋ ์ค์น
# npm
npm install uuid
# v4 ๋ง ์ค์น
npm install uuid4
# yarn
yarn add uuid
UUID์๋ ์์ฑ ๋ฐฉ๋ฒ์ด ๋ฒ์ ผ๋ณ๋ก ์ฌ๋ฌ๊ฐ์ง ์๋ค.
- v1: ํ์์คํฌํ(์๊ฐ) ๊ธฐ์ค์ผ๋ก ์์ฑ
- v3: MD5 ํด์ ๊ธฐ์ค์ผ๋ก ์์ฑ
- v4: ๋๋ค๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ
- v5: SHA-1 ํด์ ๊ธฐ์ค์ผ๋ก ์์ฑ
์์ ์์ฑ๋ฐฉ๋ฒ๋ค ์ค ๋ง์์ ๋๋ ๊ฒ์ ๊ณจ๋ผ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ณดํต v4๊ฐ ๋ฌด๋ํ๋ค.
v1(ํ์์คํฌํ ๊ธฐ๋ฐ) UUID ์์ฑ
import { v1 } from 'uuid';
//๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์์ฑ
console.log(v1());
//์ค์ ์ ๋ถ์ฌ์ ์์ฑ
let options = {
node: // ๋ฐ์ดํธ๊ฐ 6๊ฐ
clockseq: // ํด๋ญ ์ํ์ค (0 - 0x3fff ์ฌ์ด ๊ฐ)
msecs: // ๋ฐ๋ฆฌ์ด
nsecs: // ๋๋
ธ์ด
random: // 16๊ฐ์ ๋๋ค ๋ฐ์ดํธ๊ฐ
rng: // random ๋ณ์๋ฅผ ๋์ฒดํ 16๊ฐ์ ๋๋ค ๋ฐ์ดํธ๊ฐ์ ๋ฐํํ๋ ํจ์
}
console.log(v1(options));
v3(MD5 ๊ธฐ๋ฐ) UUID ์์ฑ
์ฐธ๊ณ ๋ก RFC ํ์ค์ ๋ฐ๋ฅด๋ฉด ํ์ํธํ๊ฐ์ ์ฌ์ ๊ฐ ์๋๋ผ๋ฉด v3๋ณด๋ค๋ v5๋ฅผ ์ฌ์ฉํ๋๊ฑธ ์ถ์ฒํ๋ค.
import { v3 } from 'uuid';
//v5๋ ๋ค์์คํ์ด์ค๋ผ๋ ๊ฐ๊ณผ ํด์ฑํ ๊ฐ์ผ๋ก UUID๋ฅผ ๋ง๋ ๋ค.
//๊ทธ๋์ ๋ค์์คํ์ด์ค๋ก ์ฌ์ฉํ UUID ๊ฐ์ด ํ์ํ๋ค.
console.log(v3('ํด์ฑํ ๊ฐ', '1a30bae5-e589-47b1-9e77-a7da2cdbc2b8'));
//ํด์ฑํ ๊ฐ์ด URL์ด๋ ๋๋ฉ์ธ์ธ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ค์์คํ์ด์ค๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
//ํด์ฑํ ๊ฐ์ด ๋๋ฉ์ธ์ธ ๊ฒฝ์ฐ
console.log(v3('www.google.com'), v3.DNS);
//ํด์ฑํ ๊ฐ์ด URL์ธ ๊ฒฝ์ฐ
console.log(v3('https://www.google.com'), v3.URL);
v4(๋๋ค๊ฐ ๊ธฐ๋ฐ) UUID ์์ฑ
import { v4 } from 'uuid';
//๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์์ฑ
console.log(v4());
//์ค์ ์ ๋ถ์ฌ์ ์์ฑ
let options = {
random: // 16๊ฐ์ ๋๋ค ๋ฐ์ดํธ๊ฐ
rng: // random ๋ณ์๋ฅผ ๋์ฒดํ 16๊ฐ์ ๋๋ค ๋ฐ์ดํธ๊ฐ์ ๋ฐํํ๋ ํจ์
}
console.log(v4(options));
v5(SHA-1 ๊ธฐ๋ฐ) UUID ์์ฑ
import { v5 } from 'uuid';
//v5๋ ๋ค์์คํ์ด์ค๋ผ๋ ๊ฐ๊ณผ ํด์ฑํ ๊ฐ์ผ๋ก UUID๋ฅผ ๋ง๋ ๋ค.
//๊ทธ๋์ ๋ค์์คํ์ด์ค๋ก ์ฌ์ฉํ UUID ๊ฐ์ด ํ์ํ๋ค.
console.log(v5('ํด์ฑํ ๊ฐ', '1a30bae5-e589-47b1-9e77-a7da2cdbc2b8'));
//ํด์ฑํ ๊ฐ์ด URL์ด๋ ๋๋ฉ์ธ์ธ ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ค์์คํ์ด์ค๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
//ํด์ฑํ ๊ฐ์ด ๋๋ฉ์ธ์ธ ๊ฒฝ์ฐ
console.log(v5('www.google.com'), v5.DNS);
//ํด์ฑํ ๊ฐ์ด URL์ธ ๊ฒฝ์ฐ
console.log(v5('https://www.google.com'), v5.URL);
๋ฐ์ดํฐ๋ฒ ์ด์ค Index UUID
UUID๋ฅผ ๊ทธ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ id๋ก ์ฌ์ฉํ๋ค๋ฉด ํ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋ค.
UUID๊ฐ๋ 16์ง์์ ๋ฌธ์์ด๊ณผ '-'์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์, string ํํ๋ก ์ ์ฅ๋๋ค.
ํ์ง๋ง DB์์ string ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ฑํ๋ฉด, ์ธ๋ฑ์ค๋ ๋น์ ์์ ์ผ๋ก ์ปค์ง๋ฉฐ ๊ฒ์ ์ฑ๋ฅ๋ ๋ง์ด ๋จ์ด์ง๊ฒ ๋๋ค.
๋ฐ๋ผ์, UUID ๊ฐ์ ์ธ๋ฑ์ฑ ๊ฐ๋ฅํ๊ณ ์์๋ฅผ ๋ณด์ฅ๋ฐ๋ ์ฒด๊ณ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ์๋ค
1-2-3-4-5 ์ ๊ตฌ์กฐ๋ฅผ 32145 ๋ก ๋ณ๊ฒฝํ๋ฉด ์ด๋์ ๋ ๋ณด์ฅ๋ฐ๋ ์ ์ฒด๊ณ๋ก ๋ณํํ ์ ์๋ค๊ณ ํ๋ค.
JS ์ฝ๋๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
const { v4 } = require('uuid');
const uuid = () => {
const tokens = v4().split('-')
return tokens[2] + tokens[1] + tokens[0] + tokens[3] + tokens[4];
}
uuid();
์ธ์ ์์ด๋ UUID
์ธ์ ID๋ฅผ ๋ฐ๊ธํด์ผ ํ ๋, uuid๋ฅผ ์ ๊ณตํด์ ์ฌ์ฉํ ์ ๋ ์๋ค.
app.use(
session({
secret: process.env.SESSION_SECRET,
resave: true, // ์์ ๋ ์ ์๋ ์ธ์
์ด๋ผ๋ ํ๋ฒ ๋ฐ๊ธ๋ ์ธ์
์ ์ ์ฅ ํ์ฉ. ๊ฒฝ์์กฐ๊ฑด์ ์ผ์ผํฌ ์ ์์
rolling: true, // ์๋ก๊ณ ์นจ์ด ๋ฐ์ํ ๋๋ง๋ค ์ธ์
refresh
saveUninitialized: true, // ์ด๊ธฐํ๋์ง ์์ ์ธ์
, ์์ฑ๋์์ผ๋ ํ๋ฒ๋ ์์ ๋์ง ์์ ์ธ์
์ ์ ์ฅํ ๊ฒ์ธ์ง
cookie: {
maxAge: 60 * 60 * 1000,
},
genid: uuidv4, // UUIDv4๋ฅผ ์ด์ฉํด session id ์์ฑ
}),
);
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.