[HTTP/network] Session

Hannahhhยท2022๋…„ 9์›” 13์ผ
0

HTTP/Network

๋ชฉ๋ก ๋ณด๊ธฐ
10/12

๐Ÿ” Session


์›น ์•ฑ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์— ์„ฑ๊ณตํ•œ ์ƒํƒœ, ์ฆ‰, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Session์€ ์ค‘์š” ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํด๋ผ๋ฆฌ์–ธํŠธ์—๋Š” ์„ธ์…˜ ์„ฑ๊ณต์„ ์ฆ๋ช…ํ•  ์ˆ˜๋‹จ์œผ๋กœ์จ ์•”ํ˜ธํ™”๋œ ์œ ์ผํ•œ ID(์„ธ์…˜ ์•„์ด๋””)๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

์ด๋•Œ, ๋กœ๊ทธ์ธ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ฟ ํ‚ค์—๋Š” ์„œ๋ฒ„์—์„œ ๋ฐœ๊ธ‰ํ•œ ์„ธ์…˜ ์•„์ด๋””๋ฅผ ์ €์žฅํ•œ๋‹ค.


๋”ฐ๋ผ์„œ, ์„ธ์…˜ ์•„์ด๋””๊ฐ€ ๋‹ด๊ธด ์ฟ ํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜์–ด ์žˆ๊ณ , ์„œ๋ฒ„๋Š” ์„ธ์…˜์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์„œ๋ฒ„๋Š” ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ์„ธ์…˜ ์•„์ด๋””๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ์„œ๋ฒ„๋‚ด์˜ ์„ธ์…˜ ์Šคํ† ์–ด์— ํ•ด๋‹น ์„ธ์…˜์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.

์ด๋•Œ, ์„ธ์…˜ ์•„์ด๋””๋กœ๋งŒ ์ธ์ฆ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๊ฐ€ ์ค‘๊ฐ„์— ํƒˆ์ทจ๋  ๊ฒฝ์šฐ, ํ•ด๋‹น ์š”์ฒญ์ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๋ฏ€๋กœ, ๊ณต๊ณตPC๋ฅผ ์‚ฌ์šฉํ•œ ๋’ค ๋กœ๊ทธ์•„์›ƒ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


๋กœ๊ทธ์•„์›ƒ์˜ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค๋ฅผ ์ž„์˜๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— set-cookie ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋•Œ, ์„ธ์…˜ ์•„์ด๋””์˜ ํ‚ค๊ฐ’์„ ๋ฌดํšจํ•œ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.




์„ค๋ช…์ ‘์† ์ƒํƒœ ์ €์žฅ ๊ฒฝ๋กœ์žฅ์ ๋‹จ์ 
CookieHTTP์˜ sateless ๋ณด์™„ํด๋ผ์ด์–ธํŠธ์„œ๋ฒ„์— ๋ถ€๋‹ดโ†“์ธ์ฆ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ์—๋Š” ์•ˆ์ „ํ•˜์ง€ X
Session์ ‘์†์ƒํƒœ๋ฅผ ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง€๋ฉฐ, stateful๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•ด ์„ธ์…˜์•„์ด๋””๋ฅผ ์ฟ ํ‚ค๋กœ ์ „์†กํ•œ๋‹ค.์„œ๋ฒ„์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ €์ธ์ง€ ์„œ๋ฒ„์—์„œ ์ถ”๊ฐ€๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ๋งŒ statefulํ•˜๊ธฐ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ๋ถ„์‚ฐ์— ๋ถˆ๋ฆฌ




๐Ÿ‘€ express-session


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

`secret`์˜ต์…˜์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ์ด์šฉํ•ด ์•”ํ˜ธํ™”ํ•œ ์„ธ์…˜ id๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ฟ ํ‚ค๋กœ ์ „์†กํ•œ๋‹ค.

์ƒ์„ฑ๋œ ์„ธ์…˜ id๋Š” ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š”๋ฐ, ์ด๋•Œ ์„ธ์…˜ id๋Š” ์œ ์ €๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์„ธ์…˜ ๊ฐ์ฒด๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๋ณ„๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ, client์— ์œ ์ € ์ •๋ณด๊ฐ€ ์žˆ์„ ํ•„์š”์—†์ด ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜ id๋ฅผ ์ด์šฉํ•ด ์œ ์ €์˜ ์ธ์ฆ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • req.session์œผ๋กœ ์„ธ์…˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ธ์…˜์˜ ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.




Reference: ์ฝ”๋“œ์Šคํ…Œ์ด์ธ 

0๊ฐœ์˜ ๋Œ“๊ธ€