๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Cookie & Session

๐Ÿ“Œ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ โ€‹

HTTP ํ”„๋กœํ† ์ฝœ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Connectionless, Statelessํ•œ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

์ด๋กœ์จ server๋Š” User๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ๋งค๋ฒˆ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊น๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด Session๊ณผ Cookie๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.


Connectionless (๋น„์—ฐ๊ฒฐ์„ฑ)โ€‹

User์™€ Server๊ฐ„ ํ†ต์‹ ์„ ํ•  ๋•Œ request์™€ response๋ฅผ ์ฃผ๊ณ ๋ฐ›์€ ํ›„ ๋ฐ”๋กœ ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๋Š” ํŠน์ง•โ€‹

  • ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด resource๋ฅผ ์ค„์—ฌ ๋” ๋งŽ์ด ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋งค๋ฒˆ ์—ฐ๊ฒฐ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๋ฏ€๋กœ Overheading์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ KeepAlive ์†์„ฑ์„ HTTP1.1๋ถ€ํ„ฐ Default๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด๋Š” ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ Packet ๊ตํ™˜์ด ์—†์„ ๊ฒฝ์šฐ, ์ ‘์†์„ ๋Š๊ธฐ ์ „ ์–ด๋А ์ •๋„ Packet์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด Client ์ƒํƒœ ์ฒดํฌ๋ฅผ ํ•˜๋‚˜ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆด ๊ฒฝ์šฐ ์—ญ์‹œ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

Stateless (๋ฌด์ƒํƒœ)โ€‹

Server๋Š” User๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, Client๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.โ€‹


Client Browser ๋‚ด์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผโ€‹

  • key, value, expired, ,domain, path๋กœ ์ •๋ณด๊ฐ€ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ฟ ํ‚ค ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด ์ธ์ฆ์ด ์œ ์ง€๋œ๋‹ค.
  • ํ•˜๋‚˜์˜ Cookie๋Š” 4KB๊นŒ์ง€ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Client์— 300๊ฐœ๊นŒ์ง€ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜์˜ Domain๋‹น 20๊ฐœ์˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟ ํ‚ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•„๋„ Browser๊ฐ€ Request์‹œ Request Header์— ๋„ฃ์–ด์„œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค.

๊ตฌ์„ฑ์š”์†Œโ€‹

  • key(name) : Cookie์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„
  • value : ์ฟ ํ‚ค์™€ ๊ด€๋ จ๋œ ๊ฐ’
  • expired : ์ฟ ํ‚ค์˜ ์œ ์ง€ ์‹œ๊ฐ„
  • domain : ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋„๋ฉ”์ธ
  • path : ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์š”์ฒญ ๊ฒฝ๋กœ

๋™์ž‘ ๋ฐฉ์‹โ€‹

  1. Client๊ฐ€ Server์— Page๋ฅผ ์š”์ฒญ
  2. Server์—์„œ Cookie๋ฅผ ์ƒ์„ฑ

    Frontend Server/Backend Server ์ƒ๊ด€์—†์ด Cookie ์ƒ์„ฑ์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค.

  3. HTTP Header์— Cookie๋ฅผ ํฌํ•จํ•˜์—ฌ Response
  4. Cookie ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์ด ์ง€๋‚  ๋•Œ๊นŒ์ง€ Client์˜ Browser์— ๋ณด๊ด€
  5. Client๊ฐ€ ๊ฐ™์€ Request๋ฅผ ํ•  ๊ฒฝ์šฐ HTTP Header์— ์ž๋™์œผ๋กœ Cookie๋ฅผ ํ•จ๊ป˜ ๋ณด๋ƒ„

๐Ÿ”ฉ Sessionโ€‹

  • Server ์ธก์—์„œ๋Š” Client๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ ๊ณ ์œ ์˜ Session ID๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

    Client๊ฐ€ Request๋ฅผ ๋ณด๋‚ด๋ฉด, Server์—์„œ Session ID๋ฅผ ๋ถ€์—ฌ

  • Browser๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ Server์—์„œ Session์„ ์‚ญ์ œํ•˜๋ฉด ์ธ์ฆ์ด ๋งŒ๋ฃŒ๋œ๋‹ค.
  • Server์—์„œ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์ด ์ข‹์œผ๋‚˜, ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก Server Memory์— ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค.

๋™์ž‘ ๋ฐฉ์‹โ€‹

  1. Client๊ฐ€ Server์— ์ ‘์† ์‹œ Session ID ๋ฐœ๊ธ‰
  2. Client๋Š” Session ID๋ฅผ Cookie๋ฅผ ์ด์šฉํ•ด ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  3. Server์— ์š”์ฒญํ•  ๋•Œ Session ID๋ฅผ ๊ฐ™์ด ์„œ๋ฒ„์— HTTP Header์— request
  4. Server๋Š” Session ID๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ Session์— ์žˆ๋Š” Client ์ •๋ณด๋ฅผ ์‚ฌ์šฉ
  5. Server ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ›„ Client์— ์‘๋‹ต
์ฃผ์˜
  • ์ฟ ํ‚ค์™€ ์„ธ์…˜ ๋‘˜์˜ ๊ณผ์ •์„ ๋น„๊ตํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์„ธ์…˜ ์—ญ์‹œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ๋ณด๋‹จ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์˜ ์ฐจ์ด๋ผ๊ณ  ๋ณด๋Š” ๊ฒŒ ํŽธํ•ฉ๋‹ˆ๋‹ค.