Cookie์™€ Session

1. ๋“ฑ์žฅ๋ฐฐ๊ฒฝ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” statefulํ•œ ์„ฑ๊ฒฉ์˜ ์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์ง

(๋กœ๊ทธ์ธ์„ ํ†ตํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ)

๊ทธ๋Ÿฐ๋ฐ HTTP์˜ ํŠน์ง• (๋งํฌ) ์ค‘ ๋ฌด์ƒํƒœ(stateless), ๋น„์—ฐ๊ฒฐ์„ฑ(connectionless) ํƒ“์— ์ •๋ณด๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค.

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ์„ ํ•  ๋•Œ ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์ธ์ฆ์„ ๊ณ„์†ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿคท๐Ÿปโ€โ™€๏ธ : ์•„๋‹ˆ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ์ž–์•„! ๊ธฐ์–ตํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜์ง€?

=> ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฒƒ์ด ๋ฐ”๋กœ Cookie์™€ session!

ํด๋ผ์ด์–ธํŠธ์˜ ์ธ์ฆ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

๋งŒ์•ฝ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด

  • ์‡ผํ•‘๋ชฐ์— ์ ‘์†
  • ๋„ˆ ๋ˆ„๊ตฌ์•ผ? ๋กœ๊ทธ์ธ ํ•ด
  • ์ƒํ’ˆ ํด๋ฆญ -> ์ƒ์„ธํ™”๋ฉด์œผ๋กœ ์ด๋™
  • ๋„ˆ ๋ˆ„๊ตฌ์•ผ? ๋กœ๊ทธ์ธ ํ•ด
  • ์ฃผ๋ฌธ
  • ๋„ˆ ๋ˆ„๊ตฌ์•ผ? ๋กœ๊ทธ์ธ ํ•ด
  • ์œ ์ € ๊ทน๋Œ€๋…ธ ๐Ÿ”ฅ๐Ÿ”ฅ

=> ์—ด๋ฐ›์€ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๊บผ๋ฒ„๋ฆฌ๊ณ  ๋ง ๊ฒƒ์ด๋‹ค.

์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ

์ตœ์ดˆ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด, ์„œ๋ฒ„๊ฐ€ ๊ทธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ธ์ฆ์„ ์œ ์ง€ํ•œ๋‹ค.

์ฆ‰, ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ํ†ตํ•ด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ!

2. Cookie๋ž€?

ํด๋ผ์ด์–ธํŠธ ์ธก(๋ธŒ๋ผ์šฐ์ €)์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ์ž‘์€ ๊ธฐ๋ก ์ •๋ณด ํŒŒ์ผ

์ฟ ํ‚ค์˜ ํŠน์ง•

  • ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ์œ ํšจํ•œ ์‹œ๊ฐ„์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํ•œ ๋ฒˆ ์œ ํšจ ์‹œ๊ฐ„์ด ์ •ํ•ด์ง€๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋„๋”๋ผ๋„ ์ธ์ฆ์ด ์œ ์ง€๋œ๋‹ค

2-1. ์ฟ ํ‚ค ๊ตฌ์„ฑ ์š”์†Œ

  • ์ด๋ฆ„
    • ๊ฐ๊ฐ์˜ ์ฟ ํ‚ค๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„
  • ๊ฐ’
    • ์ฟ ํ‚ค๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’
  • ์œ ํšจ์‹œ๊ฐ„
    • ์ฟ ํ‚ค์˜ ์œ ์ง€์‹œ๊ฐ„
  • ๋„๋ฉ”์ธ
    • ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋„๋ฉ”์ธ
  • ๊ฒฝ๋กœ
    • ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์š”์ฒญ ๊ฒฝ๋กœ

2-2. ์ฟ ํ‚ค ๋™์ž‘ ๋ฐฉ์‹

์ด์ „์— ํฌ์ŠคํŒ…ํ•œ cookie, session, token ์ฐธ๊ณ 


  • 1) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
  • 2) ์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ
  • 3) HTTP ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ํฌํ•จ์‹œ์ผœ ์‘๋‹ต
    • ์ด ์‘๋‹ต์—” Set-Cookie ํ—ค๋”๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค
    • ๋ธŒ๋ผ์šฐ์ €๋Š” Set-Cookie ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ฟ ํ‚ค
      Set-Cookie: normal=yes
      

    ์„œ๋ฒ„์—์„œ ์ „์†กํ•˜๋Š” ์‘๋‹ต์— ํฌํ•จ๋œ โ€ Set-Cookie โ€œ ํ—ค๋”


  • 4) ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ฟ ํ‚ค ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์žˆ์œผ๋‹ˆ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๊ด€ํ•จ
  • 5) ์ฟ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋ฉด, ์š”์ฒญ์‹œ์— HTTP ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ด์„œ ์š”์ฒญ
      Cookie: normal=yes;
    

    ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณด๋‚ด๋Š” ์š”์ฒญ์— ํฌํ•จ๋œ โ€ Cookie โ€œ ํ—ค๋”

  • 6) ์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค๋ฅผ ์ฝ์–ด ์ด์ „ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ์ฟ ํ‚ค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ณ€๊ฒฝ๋œ ์ฟ ํ‚ค๋ฅผ HTTP ํ—ค๋”์— ํฌํ•จ์‹œ์ผœ ์‘๋‹ต

์ฟ ํ‚ค๋Š” ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. </br>

2-3. ์ฟ ํ‚ค ์‚ฌ์šฉ ์˜ˆ

  • ๋กœ๊ทธ์ธ ์‹œ, โ€œ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?โ€
  • ์‡ผํ•‘๋ชฐ์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ

3. Session์ด๋ž€?

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

์„œ๋ฒ„์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์„ธ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•˜๋ฉฐ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์ธ์ฆ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

๋ฌผ๋ก  ์ ‘์† ์‹œ๊ฐ„์— ์ œํ•œ์„ ๋‘์–ด ์ผ์ • ์‹œ๊ฐ„ ์‘๋‹ต์ด ์—†๋‹ค๋ฉด ์„ธ์…˜์„ ๋Š๋„๋ก ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—โ€ฆ
    • ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์— ์ข‹๋‹ค
    • ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•œ๋‹ค

๋™์ ‘์ž ์ˆ˜๊ฐ€ ๋งŽ์€ ์›น ์‚ฌ์ดํŠธ์ธ ๊ฒฝ์šฐ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์š”์ธ

3-1. ์„ธ์…˜ ๋™์ž‘ ๋ฐฉ์‹


  • 1) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ ‘์† ์‹œ ์„ธ์…˜ ID๋ฅผ ๋ฐœ๊ธ‰
    • Set-Cookie ํ—ค๋”๋กœ ์„ธ์…˜ ID๋ฅผ ๋„ฃ์–ด๋‘”๋‹ค
  • 2) ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ ID์— ๋Œ€ํ•ด ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅ ( ์ด๋•Œ ์ฟ ํ‚ค์˜ ์ด๋ฆ„์€ JSESSIONID)


  • 3) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋‹ค์‹œ ์ ‘์† ์‹œ ์ด ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์„ธ์…˜ ID ๊ฐ’์„ ์„œ๋ฒ„์— ์ „๋‹ฌ
    • Cookie ํ—ค๋”์˜ ์„ธ์…˜ ID๋ฅผ ๋„ฃ์–ด์„œ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ
    • ์„œ๋ฒ„๋Š” ๊ทธ ์„ธ์…˜ ID๋ฅผ ์ฝ์–ด ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์ธ์ง€ ํŒ๋‹จํ•œ๋‹ค

3-2. ์„ธ์…˜ ํŠน์ง•

  • 1) ๊ฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ณ ์œ  ID๋ฅผ ๋ถ€์—ฌ
  • 2) ์„ธ์…˜ ID๋กœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ์š”๊ตฌ์— ๋งž๋Š” ์„œ๋น„์Šค ์ œ๊ณต
  • 3) ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ ์šฐ์ˆ˜
  • 4) ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ ๋งŽ์ด ์ฐจ์ง€ํ•จ

3-3. ์„ธ์…˜ ์‚ฌ์šฉ ์˜ˆ

๋กœ๊ทธ์ธ ๊ฐ™์€ ๋ณด์•ˆ์ƒ ์ค‘์š”ํ•œ ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ์‚ฌ์šฉ </br>

์ดํ›„ ์š”์ฒญ๋ถ€ํ„ฐ ์ „์†ก๋  Cookie ํ—ค๋”์˜ ์„ธ์…˜ ID๋ฅผ ์ฝ์–ด ์–ด๋–ค ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ธ์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค. </br>

๋Œ€๋ถ€๋ถ„์˜ ์›น ์‚ฌ์ดํŠธ์˜ ๋กœ๊ทธ์ธ ๊ตฌํ˜„์ด ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. </br>

4. ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ์ฐจ์ด

์—ญํ• ์ด ๋น„์Šทํ•˜๊ณ , ๋™์ž‘์›๋ฆฌ๋„ ๋น„์Šทํ•˜๋‹ค.
๊ทธ ์ด์œ ๋Š” ์„ธ์…˜๋„ ๊ฒฐ๊ตญ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ!

โ€“ ์ฟ ํ‚ค ์„ธ์…˜
์ €์žฅ์œ„์น˜ ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„
์œ ์ง€๊ธฐ๊ฐ„ ์ฟ ํ‚ค ๋งŒ๋ฃŒ๊ธฐ๊ฐ„๊นŒ์ง€ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ๊นŒ์ง€
๋ณด์•ˆ ๋น„๊ต์  ๋‚˜์จ ๋น„๊ต์  ์ข‹์Œ
์š”์ฒญ์†๋„ ๋น„๊ต์  ๋น ๋ฆ„ ๋น„๊ต์  ๋Š๋ฆผ
  • 1) ์‚ฌ์šฉ์ž ์ •๋ณด ํŒŒ์ผ ์ €์žฅ์œ„์น˜
    • ์ฟ ํ‚ค : ๋ธŒ๋ผ์šฐ์ €
    • ์„ธ์…˜ : ์„œ๋ฒ„
  • 2) ์ธ์ฆ์ƒํƒœ ์œ ์ง€ ์‹œ๊ฐ„
    • ์ฟ ํ‚ค : ์ฟ ํ‚ค๋งŒ๋ฃŒ๊ธฐ๊ฐ„๊นŒ์ง€
    • ์„ธ์…˜ : ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ๊นŒ์ง€ ์ธ์ฆ์ƒํƒœ ์œ ์ง€
      • (์ ‘์† ์‹œ๊ฐ„ ์ œํ•œ์œผ๋กœ ์ผ์ •์‹œ๊ฐ„ ์‘๋‹ต์—†์œผ๋ฉด ์„ธ์…˜ ์ข…๋ฃŒ ์„ค์ • ๊ฐ€๋Šฅ)
  • 3) ๋ณด์•ˆ
    • ์ฟ ํ‚ค : ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์Œ
    • ์„ธ์…˜ : ์„œ๋ฒ„์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๋ณด๋‹จ ์ข‹์Œ
      • (ํ•˜์ง€๋งŒ ์ค‘๊ฐ„์— ํƒˆ์ทจ๋‹นํ•  ์ˆ˜ ์žˆ์–ด์„œ ์•ˆ์ „ํ•˜์ง„ ์•Š๋‹ค)
  • 3) ์š”์ฒญ์†๋„
    • ์ฟ ํ‚ค : ๋น ๋ฆ„
    • ์„ธ์…˜ : ์ฟ ํ‚ค๋ณด๋‹ค ๋Š๋ฆผ
      • (์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

์„ธ์…˜์€ ์‚ฌ์šฉ์ž ์ˆ˜ ๋งŒํผ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์š”์ฆ˜์€ ํ† ํฐ ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ ์ค‘ JWT(Json Web Token)์ด ์žˆ๋‹ค.
JWT ํฌ์ŠคํŠธ (๋งํฌ)๋Š” ๋ณ„๋„๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

๋ฐœ์ „ํ•˜๋Š” ์ฟ ํ‚ค, SameSite

์ฟ ํ‚ค๋Š” ๋ณด์•ˆ๊ณผ ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ๊ฐ€ ์ทจ์•ฝํ•˜๋‹ค.
๋”ฐ๋ผ์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฟ ํ‚ค๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์ด ์ ์ฐจ ๋ฐ”๋€Œ์–ด๊ฐ€๊ณ  ์žˆ๋‹ค.

๊ทธ ์ค‘ ์ฟ ํ‚ค์— ์ถ”๊ฐ€๋œ sameSite ์†์„ฑ์„ ์•Œ์•„๋ณด์ž.

4. SameSite ์†์„ฑ