๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] Forward, Redirect, Session ๋ณธ๋ฌธ

โญ Forward vs Redirect

 

  • JSP ํ™˜๊ฒฝ์—์„œ ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ํŽ˜์ด์ง€ ์ „ํ™˜ ๊ธฐ๋Šฅ
  • forward
    • ์„ค๋ช…
      1. ๊ณ ๊ฐ์ด ๊ณ ๊ฐ์„ผํ„ฐ๋กœ 123๋ฒˆ์œผ๋กœ ์ „ํ™”๋ฅผ ๊ฑด๋‹ค.
      2. ์ „ํ™”๋ฒˆํ˜ธ 123๋ฒˆ์— ํ• ๋‹น๋œ ์ƒ๋‹ด์›1์ด ๋ฐ›๋Š”๋‹ค.
      3. ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐํ•œ๋‹ค.
      4. ์ƒ๋‹ด์›1์˜ ๋‹ด๋‹น ์—…๋ฌด๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ํ•ด๋‹น ์—…๋ฌด์— ๋‹ด๋‹น์ž์ธ ์ƒ๋‹ด์›2์—๊ฒŒ ๊ณ ๊ฐ ์š”์ฒญ์‚ฌํ•ญ ๋ฉ”๋ชจ์ง€์™€ ํ•จ๊ป˜ ์ „ํ™”๋ฅผ ๋Œ๋ฆฐ๋‹ค.
        • ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ (request) ์žฌ์‚ฌ์šฉ
        • ๊ณ ๊ฐ์€ ๋‹ค์‹œ ์š”์ฒญ์‚ฌํ•ญ ์ด์•ผ๊ธฐํ•  ํ•„์š” ์—†์Œ
      5. ์ƒ๋‹ด์›2์€ ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
    • ์„œ๋ฒ„ ์ž…์žฅ์—์„œ ํŽ˜์ด์ง€ ์ด๋™ ์ฆ‰, ์‹ค์ œ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Œ
    • ์›น ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์ตœ์ดˆ ํ˜ธ์ถœํ•œ URL๋งŒ ํ‘œ์‹œ๋˜๊ณ  ์ด๋™ํ•œ ํŽ˜์ด์ง€์˜ URL ์ •๋ณด ์•Œ ์ˆ˜ ์—†์Œ
    • ๋™์ผํ•œ ์„œ๋ฒ„์— ์žˆ๋Š” ํŽ˜์ด์ง€๋งŒ ์ด๋™ ๊ฐ€๋Šฅ
    • ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํŽ˜์ด์ง€์™€ forward์— ์˜ํ•ด ํ˜ธ์ถœ๋  ํŽ˜์ด์ง€๋Š” request, response ๊ฐ์ฒด ๊ณต์œ 
      • ๊ณ ๊ฐ ์š”์ฒญ์‚ฌํ•ญ์€ ๊ณ ๊ฐ์ด ์ „ํ™” ๋Š์„ ๋•Œ๊นŒ์ง€ ์œ ํšจ
      • ๋‹ค์Œ ์ด๋™ํ•œ URL๋กœ ์š”์ฒญ์ •๋ณด๋ฅผ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌํ•จ
      • ์‚ฌ์šฉ์ž ์š”์ฒญ์ •๋ณด๋ฅผ forward (์ „๋‹ฌ) ํ•˜๋Š” ๊ฒƒ
    • ์˜ˆ์‹œ
      • ๋‹จ์ˆœ ์กฐํšŒ
      • ์‚ฌ์šฉ์ž ์š”์ฒญ ์žฌ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€์—†์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ
      • ๊ฒ€์ƒ‰, ๋กœ๊ทธ์ธ
  • redirect
    • ์„œ๋ฒ„๋Š” redirect ๋ช…๋ น์ด ๋“ค์–ด์˜ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋ผ๋Š” ๋ช…๋ น์„ ๋‚ด๋ฆผ
    • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” URL์„ ์ง€์‹œ๋œ ์ฃผ์†Œ๋กœ ๋ฐ”๊พธ๊ณ  ๊ทธ ์ฃผ์†Œ๋กœ ์ด๋™ํ•จ
    • ๋‹ค๋ฅธ ์„œ๋ฒ„์— ์žˆ๋Š” ์ฃผ์†Œ ์ด๋™ ๊ฐ€๋Šฅ
    • ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€์—์„œ๋Š” request, response ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ
      • ์ด์ „์— ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ ์‚ฌ๋ผ์ง€๊ณ  ๋‹ค์‹œ ์š”์ฒญ์‚ฌํ•ญ ๋งํ•ด์•ผ ํ•จ
      • redirect ๊ฒฝ์šฐ ์ตœ์ดˆ ์š”์ฒญ์„ ๋ฐ›์€ URL1์— ํด๋ผ์ด์–ธํŠธ์— redirectํ•  URL2๋ฅผ ๋ฆฌํ„ดํ•จ
      • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „ํ˜€ ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ์ƒ์„ฑํ•˜์—ฌ URL2์— ๋‹ค์‹œ ์š”์ฒญ์„ ๋ณด๋ƒ„
      • ์ฒ˜์Œ ๋ณด๋ƒˆ๋˜ ์ตœ์ดˆ์˜ ์š”์ฒญ์ •๋ณด๋Š” ๋”์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์Œ
    • ์„ค๋ช…
      1. ๊ณ ๊ฐ์ด ๊ณ ๊ฐ์„ผํ„ฐ๋กœ 123๋ฒˆ์œผ๋กœ ์ „ํ™”๋ฅผ ๊ฑด๋‹ค.
      2. ์ „ํ™”๋ฒˆํ˜ธ 123๋ฒˆ์— ํ• ๋‹น๋œ ์ƒ๋‹ด์›1์ด ๋ฐ›๋Š”๋‹ค.
      3. ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐํ•œ๋‹ค.
      4. ์ƒ๋‹ด์›1์ด ๊ณ ๊ฐ์—๊ฒŒ ํ•ด๋‹น ์—…๋ฌด๋Š” ์ €ํฌ ๊ด€๊ณต์„œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๋ฌธ์˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜๋ฉฐ ๋‹ค๋ฅธ ๊ด€๊ณต์„œ์˜ ๋ฌธ์˜ ์ „ํ™”๋ฒˆํ˜ธ 789๋ฅผ ์•Œ๋ ค์ค€๋‹ค.
      5. ๊ณ ๊ฐ์€ ์ „ํ™”๋ฒˆํ˜ธ 789๋ฒˆ์— ์ „ํ™”๋ฅผ ๊ฑด๋‹ค.
      6. ์ „ํ™”๋ฒˆํ˜ธ 789๋ฒˆ์— ํ• ๋‹น๋œ ์ƒ๋‹ด์›A๊ฐ€ ๋ฐ›๋Š”๋‹ค.
      7. ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐํ•œ๋‹ค.
        • ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ (request) ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€
        • ๊ณ ๊ฐ์€ ๋‹ค์‹œ ์š”์ฒญ์‚ฌํ•ญ์„ ์ด์•ผ๊ธฐ ํ•ด์•ผํ•จ
      8. ์ƒ๋‹ด์›A๋Š” ๊ณ ๊ฐ์˜ ์š”์ฒญ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.
    • ์˜ˆ์‹œ
      • ์ˆ˜์ •์ด๋‚˜ ์‚ญ์ œ
      • forward ๋ณด๋‹ค๋Š” ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋‹ค์‹œ ๋ฐ›๋Š” ๊ฒƒ์ด ๋‚˜์Œ
      • forward๋Š” ์‚ฌ์šฉ์ž ์š”์ฒญ ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธ€์“ฐ๊ธฐํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ ์ƒˆ๋กœ๊ณ ์นจ ๋ˆ„๋ฅด๋ฉด DB์— ๊ธ€์ด ์—ฌ๋Ÿฌ๋ฒˆ ์ €์žฅ๋  ์ˆ˜ ์žˆ์Œ

 

 

 

 

โญSession

  • ์„œ๋ฒ„์— ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•  ๋•Œ ์‚ฌ์šฉ
  • ์ฟ ํ‚ค๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์„ธ์…˜์€ ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•จ
  • ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ํ•œ ์„ธ์…˜์„ ์ƒ์„ฑํ•จ 

์›น ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋œ ์„ธ์…˜

  • ์„ธ์…˜์ด ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์ ์œผ๋กœ ๋” ์ข‹์Œ

 

  • ์„ธ์…˜ ์ƒ์„ฑ
    • <%@ page session="true" %>
    • page ์ง€์‹œ์ž session ๊ธฐ๋ณธ๊ฐ’์€ true์ด๋ฏ€๋กœ session ์†์„ฑ์„ false๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์„ธ์…˜ ์ƒ์„ฑ
    • ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„ ํ”„๋กœ๊ทธ๋žจ์€ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฒ˜์Œ ์ ‘์†ํ•  ๋•Œ ์„ธ์…˜์„ ์ƒ์„ฑ, ์ดํ›„ ๊ธฐ์กด์— ์ƒ์„ฑ๋œ ์„ธ์…˜ ์‚ฌ์šฉ

 

  • ์„ธ์…˜ ์•„์ด๋””๋ฅผ ํ†ตํ•œ ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ

  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์„œ๋ฒ„์— ์ ‘์†ํ–ˆ๋‹ค๋ผ๊ณ  ์ƒํƒœ์ •๋ณด๋ฅผ ๋‚จ๊ธฐ๊ธฐ์œ„ํ•ด  session ๊ฐ์ฒด ์ƒ์„ฑ
  • ์„ธ์…˜์ด ์ƒ์„ฑ๋˜๋ฉด session ๊ธฐ๋ณธ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„ธ์…˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณ ์œ  ์‹๋ณ„์ž ID๋ฅผ ๋ฐ›์•„์„œ ๊ฐ™์ด ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ session ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๊ฐ์ฒด ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์คŒ
  • session ๊ฐ์ฒด๋ฅผ ๊ณ„์† ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์œ ํšจ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฌดํšจํ™”๋ฅผ ์‹œํ‚ค๊ณ  ๋ฌดํšจํ™”๊ฐ€ ๋˜๊ธฐ ์ „์ด๋ผ๋ฉด ๊ธฐ์กด session ๊ฐ์ฒด๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฏ€๋กœ ์ด๋ฏธ ์ธ์ฆ์ด ๋œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งž๋Š”์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ
  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” isNew() ๋ฉ”์†Œ๋“œ์—์„œ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ํ•œ๋ฒˆ์ด๋ผ๋„ ๋‹ค๋ฅธ JSP ํŽ˜์ด์ง€๋‚˜ ์„œ๋ธ”๋ฆฟ์„ ๊ฑฐ์ณ์„œ ์™”๋‹ค๋ฉด ์ด๋ฏธ ์„ธ์…˜์ด ์ƒ์„ฑ๋œ ์ƒํƒœ๊ฐ€ ๋˜์–ด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์‹œ ์ฃผ์˜ ๐Ÿšจ
  • session ๊ธฐ๋ณธ ๊ฐ์ฒด๋Š” ์†์„ฑ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ setAttribute(), getAttribute() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ

 

  • ๋ฉ”์„œ๋“œ

  • session.setAttribute = ์„ธ์…˜์—๋‹ค๊ฐ€ ์ •๋ณด ์ €์žฅ
    getAttribute(String name) = ๋ฐ˜ํ™˜๊ฐ’์€ object์ด๊ธฐ๋•Œ๋ฌธ์— String์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค.
    getAttributeNames()๋Š” for๋ฌธ ๋Œ๋ฉด์„œ ์–ด๋–ค ์ด๋ฆ„์ด ์ €์žฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ์„ธ์…˜ ID
    • ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ๋ณ„๋„์˜ ์„ธ์…˜์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์„ธ์…˜ ๊ณ ์œ  ID
  • JSESSIONID
    • ์›น ์„œ๋ฒ„์™€ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„ธ์…˜ ID ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ฟ ํ‚ค
    • ์›น ์„œ๋ฒ„๋Š” ์„ธ์…˜ ID ์ด์šฉํ•ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•œ ์„ธ์…˜์„ ์ฐพ์Œ
    • JSESSIONID๋ฅผ ํ†ตํ•ด ์„ธ์…˜ ID ๊ณต์œ