[Session][๊ฐœ๋…] ๐Ÿ”„ ์ฒซ ์š”์ฒญ๋ถ€ํ„ฐ ๋กœ๊ทธ์•„์›ƒ๊นŒ์ง€, ์„ธ์…˜์œผ๋กœ ์•Œ์•„๋ณด๋Š” ์›น ์ƒํƒœ ์œ ์ง€์˜ ๋ชจ๋“  ๊ฒƒ

๊น€์ƒ์šฑยท2024๋…„ 10์›” 14์ผ
0
post-thumbnail

๐Ÿ› ๏ธ ์›น ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ์„ธ์…˜(HttpSession)์˜ ๋ชจ๋“  ๊ฒƒ!

1๏ธโƒฃ Session์ด๋ž€? ๐Ÿงพ

๐Ÿ” ์ •์˜

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

๐Ÿ› ๏ธ WAS ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ €์žฅ

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(WAS)์˜ ๋ฉ”๋ชจ๋ฆฌ์— Object๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋„ ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Š ๋ฉ”๋ชจ๋ฆฌ ํ•œ๋„ ๋‚ด์—์„œ ์ œํ•œ ์—†๋Š” ์ €์žฅ

  • ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์ด ํ—ˆ์šฉํ•˜๋Š” ํ•œ๋„ ๋‚ด์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘๊ณผ ์ข…๋ฅ˜์— ์ œํ•œ ์—†์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹จ, ๋„ˆ๋ฌด ๋งŽ์€ ์„ธ์…˜์ด ์Œ“์ด๋ฉด ์„œ๋ฒ„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ Session ์‚ฌ์šฉ ์˜ˆ์‹œ ๐Ÿ›’

๐Ÿ”‘ ๋กœ๊ทธ์ธ ์ •๋ณด ์œ ์ง€

  • ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ ๋‚ด ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋„ ๋งค๋ฒˆ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•  ํ•„์š” ์—†์ด ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ์ธ ํ›„ ์„ธ์…˜์— ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋”๋ผ๋„ ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๐Ÿ›๏ธ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ ์œ ์ง€

  • ์‚ฌ์šฉ์ž๊ฐ€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋ฌผํ’ˆ์„ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ, ์„ธ์…˜์— ์ €์žฅ๋œ ์ •๋ณด ๋•๋ถ„์— ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์šฉ์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • ์‹ฌ์ง€์–ด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž ์‹œ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด์–ด๋„ ์„ธ์…˜์ด ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ Session์˜ ์žฅ์ ๊ณผ ์ฃผ์˜์  โš ๏ธ

๐Ÿ’ก ์žฅ์ 

  • ๋กœ๊ทธ์ธ ์ธ์ฆ๊ณผ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ํฌ๊ฒŒ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

โš ๏ธ ์ฃผ์˜์ 

  • ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์„ธ์…˜์ด ๋งŽ์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์œ ์ง€ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์„œ๋ฒ„ ์„ฑ๋Šฅ์— ๋ถ€๋‹ด์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์„ธ์…˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„(session timeout)์„ ์ ์ ˆํžˆ ์„ค์ •ํ•ด ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ๋งŒ๋ฃŒ๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Session๊ณผ JSESSIONID๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•

1๏ธโƒฃ Session์˜ ๋™์ž‘ ์ˆœ์„œ ๐Ÿ”„

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€ ์š”์ฒญ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„๊ฐ€ Request-Header์—์„œ Cookie ํ™•์ธ ๐Ÿช

    • ์„œ๋ฒ„๋Š” ์š”์ฒญ ํ—ค๋”(Request Header)์— ์žˆ๋Š” Cookie๋ฅผ ํ™•์ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น session-id๋ฅผ ๋ณด๋ƒˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      • ๋งŒ์•ฝ session-id๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜์„ ๋ณต์›ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. Session-ID๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑ

    • session-id๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด ์„ธ์…˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  session-id๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ด session-id๋Š” ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ ํ•œ ID์ž…๋‹ˆ๋‹ค.
  4. Session-ID๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ

    • ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ ์ƒ์„ฑํ•œ session-id๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.
    • ์ด ์ฟ ํ‚ค์˜ ์ด๋ฆ„์€ ๋ณดํ†ต JSESSIONID์ž…๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žฌ์ ‘์† ์‹œ Session-ID ์ „์†ก

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

2๏ธโƒฃ Session์˜ ํŠน์ง• ๐ŸŒŸ

  1. ์›น ์„œ๋ฒ„์— ์ƒํƒœ ์ •๋ณด ์ €์žฅ

    • ์›น ์„œ๋ฒ„๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์„ธ์…˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์šฉ ๋“ฑ์ด ์„ธ์…˜์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ์„ธ์…˜ ๊ด€๋ฆฌ ๐Ÿช

    • ์„ธ์…˜์€ ์„œ๋ฒ„์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ์˜ ์ฟ ํ‚ค(์„ธ์…˜ ์ฟ ํ‚ค)์™€ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๊ณ„์† ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ ์„ธ์…˜ ์ข…๋ฃŒ

    • ์ผ๋ฐ˜ ์ฟ ํ‚ค์™€ ๋‹ฌ๋ฆฌ, ์„ธ์…˜ ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžˆ๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์„ธ์…˜์„ ์‚ญ์ œํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
    • ์ฟ ํ‚ค์— ๋น„ํ•ด ๋ณด์•ˆ์ด ๋” ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ์ •๋ณด ๊ด€๋ฆฌ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  4. ์ €์žฅ ๋ฐ์ดํ„ฐ์˜ ์šฉ๋Ÿ‰ ์ œํ•œ ์—†์Œ

    • ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์–‘์— ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๊ณ ์œ ํ•œ Session-ID ๋ถ€์—ฌ

    • ์„œ๋ฒ„๋Š” ์ ‘์†ํ•œ ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๊ณ ์œ ํ•œ Session-ID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  6. Session-ID๋กœ ํด๋ผ์ด์–ธํŠธ ๊ตฌ๋ถ„ ๋ฐ ๋งž์ถค ์„œ๋น„์Šค ์ œ๊ณต

    • Session-ID๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋งž์ถคํ˜• ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ œ๊ณต๋˜๋Š” ์„œ๋น„์Šค๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์˜ ๋‚ด์šฉ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš™๏ธ ์ฒซ ์š”์ฒญ๋ถ€ํ„ฐ ๋กœ๊ทธ์ธ๊นŒ์ง€, Session์œผ๋กœ DB ์ ‘๊ทผ ์—†์ด ํšจ์œจ ๊ทน๋Œ€ํ™”!

1๏ธโƒฃ Session์˜ ์„ค์ • ๐Ÿ› ๏ธ

  1. ๋ธŒ๋ผ์šฐ์ € ๋‹น ํ•˜๋‚˜์˜ JSESSIONID ํ• ๋‹น

    • ์›น ์„œ๋ฒ„๋Š” ๊ฐ ๋ธŒ๋ผ์šฐ์ €์— ํ•˜๋‚˜์˜ ์„ธ์…˜ ID๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ‘์†ํ•˜๋”๋ผ๋„ ๊ฐ™์€ ์„ธ์…˜ ID๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  2. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๋Š” Session์— ์ €์žฅ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””๋‚˜ ๋‹‰๋„ค์ž„์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด, ์ด ์ •๋ณด๋Š” Session์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋งค๋ฒˆ DB์— ์ ‘๊ทผํ•  ํ•„์š” ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

2๏ธโƒฃ Session์˜ ๋™์ž‘ ํ๋ฆ„ (HTTP ์š”์ฒญ ํ๋ฆ„) ๐Ÿ”„

  1. ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ /index.html์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
      GET /index.html HTTP/1.1
    • ์ด๋•Œ ์ฒ˜์Œ ์š”์ฒญํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค์— JSESSIONID๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„์˜ ์‘๋‹ต: JSESSIONID ๋ถ€์—ฌ

    • ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ์„ธ์…˜ ID(JSESSIONID)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๋Š” ์‘๋‹ต ํ—ค๋”์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด Set-Cookie๋ฅผ ํฌํ•จํ•ด JSESSIONID๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
      HTTP/1.1 200 OK
      Set-Cookie: JSESSIONID=mk52gGa3UK71Tx.....
  3. ๋‘ ๋ฒˆ์งธ ์š”์ฒญ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ JSESSIONID๋ฅผ ํฌํ•จํ•ด ์š”์ฒญ

    • ์ดํ›„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ /user/login.html ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋•Œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„์—์„œ ๋ถ€์—ฌ๋ฐ›์€ JSESSIONID๋ฅผ ์ฟ ํ‚ค์— ๋‹ด์•„ ํ•จ๊ป˜ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
      GET /user/login.html HTTP/1.1
      Cookie: JSESSIONID=mk52gGa3UK71Tx.....
    • ์„œ๋ฒ„๋Š” ์ด JSESSIONID๋ฅผ ํ™•์ธํ•˜์—ฌ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์„ ์‹๋ณ„ํ•˜๊ณ , ์ƒํƒœ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ Session์˜ ํšจ์œจ์„ฑ ๐ŸŒŸ

  1. DB ์ ‘๊ทผ ์ตœ์†Œํ™”

    • ์„ธ์…˜์— ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด, ๋งค๋ฒˆ DB์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.
  2. ๋น ๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ

    • ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•ด๋„ ์„ธ์…˜์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์ƒํƒœ๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํƒœ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋ณด์•ˆ ํ–ฅ์ƒ

    • ์„ธ์…˜์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์ด ๋†’์€ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ์ธ์ •๋ณด์™€ ๊ฐ™์€ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ•„์ˆ˜ ๊ฐ€์ด๋“œ: HttpSession ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ• A to Z

1๏ธโƒฃ HttpSession ์ƒ์„ฑ ๐Ÿ› ๏ธ

1.1 request.getSession()

  • ์ด ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์„ธ์…˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ์„ธ์…˜์ด ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์„ธ์…˜์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์‹œ ์„ธ์…˜์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

1.2 request.getSession(false)

  • ์ด ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์„ธ์…˜์ด ์กด์žฌํ•˜๋ฉด ๋ฐ˜ํ™˜ํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์„ธ์…˜์ด ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์„ธ์…˜ ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ฐ’ ์ €์žฅ ๐Ÿ“ฅ

session.setAttribute(String name, Object value)

  • ์„ธ์…˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • name์€ ์†์„ฑ ์ด๋ฆ„, value๋Š” ์ €์žฅํ•  ๋ฐ์ดํ„ฐ(๊ฐ์ฒด)์ž…๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    session.setAttribute("username", "johnDoe");
    ์ด ์ฝ”๋“œ์—์„œ๋Š” username์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ "johnDoe"๋ผ๋Š” ๊ฐ’์„ ์„ธ์…˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ ๐Ÿ“ค

session.getAttribute(String name)

  • ์„ธ์…˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์ด๋ฆ„(name)์„ ์‚ฌ์šฉํ•ด ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
  • ์ €์žฅ๋œ ๊ฐ’์ด Object ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ, ์ ์ ˆํ•œ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    String username = (String) session.getAttribute("username");

4๏ธโƒฃ ๊ฐ’ ์ œ๊ฑฐ ๐Ÿ—‘๏ธ

session.removeAttribute(String name)

  • ํŠน์ • ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋œ ์„ธ์…˜ ์†์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    session.removeAttribute("username");
    ์ด ์ฝ”๋“œ๋Š” username์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์†์„ฑ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

session.invalidate()

  • ํ˜„์žฌ ์„ธ์…˜์— ๋ฐ”์ธ๋”ฉ๋œ ๋ชจ๋“  ์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ์„ธ์…˜์„ ์™„์ „ํžˆ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ ๋กœ๊ทธ์•„์›ƒ ์‹œ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    session.invalidate();

5๏ธโƒฃ ์„ธ์…˜ ์ƒ์„ฑ ์‹œ๊ฐ„ ์กฐํšŒ โฐ

session.getCreationTime()

  • ํ•ด๋‹น ์„ธ์…˜์ด ์ƒ์„ฑ๋œ ์‹œ๊ฐ„์„ long ํƒ€์ž…์˜ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์‹œ๊ฐ„์€ 1970๋…„ 1์›” 1์ผ UTC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    long creationTime = session.getCreationTime();

6๏ธโƒฃ ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„ ์กฐํšŒ ๐Ÿ•’

session.getLastAccessedTime()

  • ํ•ด๋‹น ์„ธ์…˜์— ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ‘๊ทผํ•œ ์‹œ๊ฐ„์„ long ํƒ€์ž…์˜ ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ํ™œ๋™ ์‹œ๊ฐ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ์ œ:
    long lastAccessTime = session.getLastAccessedTime();

โšก Session vs Cookie: ์ƒํƒœ ๊ด€๋ฆฌ์˜ ์ตœ๊ฐ•์ž๋ฅผ ๊ฐ€๋ฆฐ๋‹ค!

1๏ธโƒฃ Session๊ณผ Cookie์˜ ๋น„๊ต ๐Ÿ› ๏ธ

๊ตฌ๋ถ„SessionCookie
Typejakarta.servlet.http.HttpSession (Interface)jakarta.servlet.http.Cookie (Class)
์ €์žฅ ์œ„์น˜์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— Object๋กœ ์ €์žฅํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์— ํŒŒ์ผ๋กœ ์ €์žฅ
์ €์žฅ ํ˜•์‹๋ชจ๋“  Object ์ €์žฅ ๊ฐ€๋Šฅ (Dto, List ๋“ฑ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋„ ์ €์žฅ ๊ฐ€๋Šฅ)ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ String ํ˜•์‹๋งŒ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ์˜ˆ๋กœ๊ทธ์ธ ์‹œ ์‚ฌ์šฉ์ž ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋ชฉ๋ก, ์ž๋™๋กœ๊ทธ์ธ, ํŒ์—… ๋ฉ”๋‰ด ('์˜ค๋Š˜์€ ๊ทธ๋งŒ ์—ด๊ธฐ' ์„ค์ •)
์šฉ๋Ÿ‰ ์ œํ•œ์ œํ•œ ์—†์Œ๋„๋ฉ”์ธ๋‹น ์ตœ๋Œ€ 20๊ฐœ, ์ฟ ํ‚ค 1๊ฐœ๋‹น ์ตœ๋Œ€ 4KB
๋งŒ๋ฃŒ ์‹œ์ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์„ธ์…˜์— ์ ‘๊ทผํ•˜์ง€ ์•Š์„ ๋•Œ (web.xml์—์„œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์„ค์ •)์ฟ ํ‚ค ์ €์žฅ ์‹œ ์„ค์ •๋œ ์‹œ๊ฐ„๊นŒ์ง€ ์œ ์ง€ (์„ค์ •์ด ์—†์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ ์‹œ ๋งŒ๋ฃŒ)
๊ณตํ†ต์ JSP์™€ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์ „์—ญ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, Key-Value ํ˜•ํƒœ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ Key ์ค‘๋ณต ํ—ˆ์šฉ ์•ˆ ํ•จ

2๏ธโƒฃ ๊ฐ ํ•ญ๋ชฉ ์„ค๋ช…

๐Ÿ” Type (์ธํ„ฐํŽ˜์ด์Šค vs ํด๋ž˜์Šค)

  • Session์€ HttpSession ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜๋˜๊ณ , ์„œ๋ฒ„ ์ธก ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Cookie๋Š” ํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ ์ธก ํŒŒ์ผ๋กœ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด์™€ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์ €์žฅ ์œ„์น˜ ๋ฐ ์ €์žฅ ํ˜•์‹

  • Session:

    • ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ์— Object ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Dto, List ๋“ฑ)๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์ด ๋” ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • Cookie:

    • ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์— ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๋ฌธ์ž์—ด(String)๋กœ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ์ƒ ์ทจ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ” ์‚ฌ์šฉ ์˜ˆ์‹œ

  • Session์€ ์ฃผ๋กœ ๋กœ๊ทธ์ธ ์ •๋ณด๋‚˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๋™์•ˆ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Cookie๋Š” ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋ชฉ๋ก, ์ž๋™๋กœ๊ทธ์ธ ์ •๋ณด์ฒ˜๋Ÿผ ์žฅ๊ธฐ์ ์œผ๋กœ ์ €์žฅ์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ '์˜ค๋Š˜์€ ์ด ํŒ์—…์„ ์—ด์ง€ ์•Š๊ธฐ'๋ฅผ ์„ ํƒํ•˜๋ฉด ์ด ์„ค์ •์ด ์ฟ ํ‚ค์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ์šฉ๋Ÿ‰ ์ œํ•œ

  • Session์€ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ ์šฉ๋Ÿ‰์— ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋„ˆ๋ฌด ๋งŽ์€ ์„ธ์…˜์ด ์Œ“์ด๋ฉด ์„œ๋ฒ„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Cookie๋Š” ๊ฐ ๋„๋ฉ”์ธ๋‹น ์ตœ๋Œ€ 20๊ฐœ, ์ฟ ํ‚ค 1๊ฐœ๋‹น 4KB๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ” ๋งŒ๋ฃŒ ์‹œ์ 

  • Session:

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์„ธ์…˜์— ์ ‘๊ทผํ•˜์ง€ ์•Š์œผ๋ฉด ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
    • ์ด ๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ web.xml์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Cookie:

    • ์ฟ ํ‚ค ์ƒ์„ฑ ์‹œ ์„ค์ •๋œ ์‹œ๊ฐ„๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ์„ค์ •๋˜์ง€ ์•Š์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ฟ ํ‚ค๋„ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๐Ÿ” ๊ณตํ†ต์ 

  • Session๊ณผ Cookie ๋ชจ๋‘ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์—ญ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, JSP์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํŽ˜์ด์ง€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ Key-Value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, Key์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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