์น ์ฑ์์ ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์ฑ๊ณตํ ์ํ, ์ฆ, ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ์ ์ฐ๊ฒฐ์ด ํ์ฑํ๋ ์ํ๋ฅผ ์๋ฏธํ๋ค.
Session์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ด๋ฆฌํ๋ฉฐ, ํด๋ผ๋ฆฌ์ธํธ์๋ ์ธ์ ์ฑ๊ณต์ ์ฆ๋ช ํ ์๋จ์ผ๋ก์จ ์ํธํ๋ ์ ์ผํ ID(์ธ์ ์์ด๋)๋ฅผ ๋ถ์ฌํ๋ค.
์ด๋, ๋ก๊ทธ์ธ์ ์ ์งํ๊ธฐ ์ํ ์๋จ์ผ๋ก ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ฟ ํค์๋ ์๋ฒ์์ ๋ฐ๊ธํ ์ธ์ ์์ด๋๋ฅผ ์ ์ฅํ๋ค.
๋ฐ๋ผ์, ์ธ์ ์์ด๋๊ฐ ๋ด๊ธด ์ฟ ํค๋ ํด๋ผ์ด์ธํธ์ ์ ์ฅ๋์ด ์๊ณ , ์๋ฒ๋ ์ธ์ ์ ์ ์ฅํ๊ณ ์๋๋ฐ, ์๋ฒ๋ ์ฟ ํค๋ฅผ ํตํด ์ธ์ ์์ด๋๋ฅผ ์ ๋ฌ๋ฐ์ ์๋ฒ๋ด์ ์ธ์ ์คํ ์ด์ ํด๋น ์ธ์ ์ด ์กด์ฌํ๋ค๋ฉด ์ ๊ทผ ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ๋ค.
์ด๋, ์ธ์ ์์ด๋๋ก๋ง ์ธ์ฆ ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ์ ์ฟ ํค๊ฐ ์ค๊ฐ์ ํ์ทจ๋ ๊ฒฝ์ฐ, ํด๋น ์์ฒญ์ด ์ธ์ฆ๋ ์ฌ์ฉ์์ ์์ฒญ์ด๋ผ๊ณ ํ๋จํ๋ฏ๋ก, ๊ณต๊ณตPC๋ฅผ ์ฌ์ฉํ ๋ค ๋ก๊ทธ์์์ ํด์ฃผ์ด์ผ ํ๋ค.
๋ก๊ทธ์์์ ๊ฒฝ์ฐ, ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ฅผ ์์๋ก ์ญ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ set-cookie
๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ฟ ํค๋ฅผ ์ ์กํ ๋, ์ธ์
์์ด๋์ ํค๊ฐ์ ๋ฌดํจํ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ ์ ์๋ค.
์ค๋ช | ์ ์ ์ํ ์ ์ฅ ๊ฒฝ๋ก | ์ฅ์ | ๋จ์ | |
---|---|---|---|---|
Cookie | HTTP์ sateless ๋ณด์ | ํด๋ผ์ด์ธํธ | ์๋ฒ์ ๋ถ๋ดโ | ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ณด๊ดํ๊ธฐ์๋ ์์ ํ์ง X |
Session | ์ ์์ํ๋ฅผ ์๋ฒ๊ฐ ๊ฐ์ง๋ฉฐ, stateful๊ณผ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํด ์ธ์ ์์ด๋๋ฅผ ์ฟ ํค๋ก ์ ์กํ๋ค. | ์๋ฒ | ์ ๋ขฐํ ์ ์๋ ์ ์ ์ธ์ง ์๋ฒ์์ ์ถ๊ฐ๋ก ํ์ธ ๊ฐ๋ฅ | ํ๋์ ์๋ฒ์์๋ง statefulํ๊ธฐ๋๋ฌธ์ ์๋ฒ ๋ถ์ฐ์ ๋ถ๋ฆฌ |
Node.js์์ ์ธ์ ์ ๋์ ๊ด๋ฆฌํด์ฃผ๋ ๋ชจ๋์ด๋ค. ์์ธํ๊ฒ๋, ์ธ์ ์ ์ํ ๋ฏธ๋ค์จ์ด๋ก, express ์๋ฒ์์ ์ธ์ ์ ์ํ ๊ณต๊ฐ์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ๋ง๋ค์ด์ค๋ค.
const express = require('express');
const session = require('express-session');
const app = express();
app.use(
session({
secret: '@secretkey',
resave: false,
saveUninitialized: true,
cookie: {
domain: 'localhost',
path: '/',
maxAge: 24 * 6 * 60 * 10000,
sameSite: 'none',
httpOnly: false,
secure: true,
},
})
);
์์ฑ๋ ์ธ์
id๋ ์๋ฒ์ ์ ์ฅ๋๋๋ฐ, ์ด๋ ์ธ์
id๋ ์ ์ ๋ณ๋ก ๋
๋ฆฝ์ ์ผ๋ก ์์ฑ๋ ์ธ์
๊ฐ์ฒด๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ ๋ณ๋ก ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋ฐ๋ผ์, client์ ์ ์ ์ ๋ณด๊ฐ ์์ ํ์์์ด ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ธ์
id๋ฅผ ์ด์ฉํด ์ ์ ์ ์ธ์ฆ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
req.session
์ผ๋ก ์ธ์
๊ฐ์ฒด์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ธ์
์ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋ถ๋ฌ์ฌ ์ ์๋ค.Reference: ์ฝ๋์คํ ์ด์ธ