4 ๋ถ„ ์†Œ์š”

๐Ÿ“š WEB


๐Ÿ“š Cookie & Session

http protocol ์˜ ํŠน์ง•

  • client ๊ฐ€ server ์— ์š”์ฒญ
  • server ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„ client์— ์‘๋‹ต
  • ์‘๋‹ต ํ›„ ์—ฐ๊ฒฐ ํ•ด์ œ -> stateless
  • HTTP Protocol ์˜ ํŠน์ง• ( ์•ฝ์  ) ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

๐Ÿ“š Cookie

javax.servlet.http.Cookie

  • ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ์ •๋ณด ํŒŒ์ผ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„์˜ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ธŒ๋ผ์šฐ์ €๋Š” request ์‹œ Request Header๋ฅผ ๋„ฃ์–ด ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์ „์†ก
  • key ์™€ value ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  String ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • Browser ๋งˆ๋‹ค ์ €์žฅ๋˜๋Š” ์ฟ ํ‚ค๋Š” ๋‹ค๋ฅด๋‹ค. ( ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ์ธ์‹ํ•œ๋‹ค. )
  • ์„ธ์…˜ ๊ด€๋ฆฌ
    ์‚ฌ์šฉ์ž ์•„์ด๋””, ์ ‘์†์‹œ๊ฐ„, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ์˜ ์„œ๋ฒ„๊ฐ€ ์•Œ์•„์•ผ ํ•  ์ •๋ณด ์ €์žฅ
  • ๊ฐœ์ธํ™”
    ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ทธ ์‚ฌ๋žŒ์— ์ ์ ˆํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ํŠธ๋ž˜ํ‚น
    ์‚ฌ์šฉ์ž์˜ ํ–‰๋™๊ณผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๊ณ  ๊ธฐ๋ก
  • ์‚ฌ์šฉ ์˜ˆ ID ์ €์žฅ ( ์ž๋™ ๋กœ๊ทธ์ธ ) , ์ผ์ฃผ์ผ๊ฐ„ ๋‹ค์‹œ ๋ณด์ง€ ์•Š๊ธฐ, ์ตœ๊ทผ ๊ฒ€์ƒ‰ํ•œ ์ƒํ’ˆ๋“ค์„ ๊ด‘๊ณ ์— ์ถ”์ฒœ, ์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ
  • ์ด๋ฆ„
    ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟ ํ‚ค๊ฐ€ client์˜ ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜๋ฏ€๋กœ ๊ฐ ์ฟ ๊ธฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„
  • ๊ฐ’
    ์ฟ ํ‚ค์˜ ์ด๋ฆ„๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ’
  • ์œ ํšจ๊ธฐ๊ฐ„
    ์ฟ ํ‚ค์˜ ์œ ํšจ๊ธฐ๊ฐ„
  • ๋„๋ฉ”์ธ
    ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋„๋ฉ”์ธ
  • ๊ฒฝ๋กœ(path)
    ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์š”์ฒญ ๊ฒฝ๋กœ
  1. Client ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
  2. WAS๋Š” Cookie ๋ฅผ ์ƒ์„ฑ
  3. HTTP Header์— Cookie๋ฅผ ๋„ฃ์–ด ์‘๋‹ต
  4. Browser๋Š” ๋„˜๊ฒจ๋ฐ›์€ Cookie๋ฅผ PC์— ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ WAS ๊ฐ€ ์š”์ฒญํ•  ๋•Œ ์š”์ฒญ๊ณผ ํ•จ๊ป˜ Cookie๋ฅผ ์ „์†ก
  5. Browser๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ Cookie์˜ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์ด ๋‚จ์•„ ์žˆ๋‹ค๋ฉด Client๋Š” ๊ณ„์† ๋ณด๊ด€
  6. ๋™์ผ ์‚ฌ์ดํŠธ ์žฌ๋ฐฉ๋ฌธ์‹œ Client์˜ PC์— ํ•ด๋‹น Cookie๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์š”์ฒญ ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ Cookie๋ฅผ ์ „์†ก
  • ์ด๋ฆ„, ๊ฐ’, ๋งŒ๋ฃŒ์ผ ( ์ €์žฅ ๊ธฐ๊ฐ„ ์„ค์ • ), ๊ฒฝ๋กœ ์ •๋ณด ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์— ์ด 300๊ฐœ์˜ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ ๋‹น 20๊ฐœ์˜ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ฟ ํ‚ค๋Š” 4KB๊นŒ์ง€ ์ €์žฅ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ƒ์„ฑ
    Cookie cookie = new Cookie(String name, String value);

  • ๊ฐ’ ๋ณ€๊ฒฝ, ์–ป๊ธฐ
    cookie.setValue(String value);
    String value = cookie.getValue();

  • ์‚ฌ์šฉ ๋„๋ฉ”์ธ ์ง€์ •/์–ป๊ธฐ
    cookie.setDomain(String domain);
    String domain = cookie.getDomain();

  • ๊ฐ’ ๋ฒ”์œ„์ง€์ •/์–ป๊ธฐ
    cookie.setPath(String path);
    String path = cookie.getPath();

  • cookie์˜ ์œ ํšจ๊ธฐ๊ฐ„์ง€์ •/์–ป๊ธฐ
    cookie.setMaxAge(int expiry);
    int expiry = cookie.getMaxAge();
    cookie ์‚ญ์ œ : cookie.setMaxAge(0);

  • ์ƒ์„ฑ๋œ cookie๋ฅผ client์— ์ „์†ก
    response.addCookie(cookie);

  • client์— ์ €์žฅ๋œ cookie ์–ป๊ธฐ
    Cookie cookies[] = request.getCookies();

๐Ÿ“š Session

Session ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

javax.servlet.http.HttpSession (Interface)

Session ์˜ ๋™์ž‘ ์ˆœ์„œ

  1. Client ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
  2. ์„œ๋ฒ„๋Š” ์ ‘๊ทผํ•œ ํด๋ผ์ด์–ธํŠธ์˜ Request-Header ํ•„๋“œ์ธ Cookie๋ฅผ ํ™•์ธํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น session-id๋ฅผ ๋ณด๋ƒˆ๋Š”์ง€ ํ™•์ธ
  3. session-id๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์„œ๋ฒ„๋Š” session-id๋ฅผ ์ƒ์„ฑํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋Œ๋ ค์ค€๋‹ค.
  4. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋Œ๋ ค์ค€ session-id๋ฅผ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„์— ์ €์žฅ, ์ฟ ํ‚ค ์ด๋ฆ„ : JESSIONID
  5. ํด๋ผ์ด์–ธํŠธ๋Š” ์žฌ ์ ‘์† ์‹œ, ์ด ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ session-id ๊ฐ’์„ ์„œ๋ฒ„์— ์ „๋‹ฌ

Session ์˜ ํŠน์ง•

  • ์›น ์„œ๋ฒ„์— ์›น ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅ
  • ์›น ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ฟ ํ‚ค ( = ์„ธ์…˜ ์ฟ ํ‚ค)
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์„ธ์…˜์„ ์‚ญ์ œํ–ˆ์„ ๋•Œ๋งŒ ์‚ญ์ œ๊ฐ€ ๋˜๋ฏ€๋กœ, ์ฟ ํ‚ค๋ณด๋‹ค ๋น„๊ต์  ๋ณด์•ˆ์ด ์ข‹๋‹ค.
  • ์ €์žฅ ๋ฐ์ดํ„ฐ์— ์ œํ•œ์ด ์—†๋‹ค.
  • ๊ฐ ํด๋ผ์ด์–ธํŠธ ๊ณ ์œ  Session ID๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.
  • Session ID๋กœ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐ ํด๋ผ์ด์–ธํŠธ ์š”๊ตฌ์— ๋งž๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Session ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ƒ์„ฑ
    HttpSession session = request.getSession();
    HttpSession session = request.getSession(false);

  • ๊ฐ’ ์ €์žฅ
    session.setAttribute(String name, Object value);

  • ๊ฐ’ ์–ป๊ธฐ
    Object obj = session.getAttribute(String name);

  • ๊ฐ’ ์ œ๊ฑฐ
    session.removeAttribute(String name); ํŠน์ • ์ด๋ฆ„์˜ ์†์„ฑ์ œ๊ฑฐ
    session.invalidate(); binding ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  ์†์„ฑ ์ œ๊ฑฐ ( ์ž์ฃผ ์‚ฌ์šฉ )

  • ์ƒ์„ฑ ์‹œ๊ฐ„
    long ct = session.getCreationTime();

  • ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„
    long lat = session.getLastAccessedTime();

Session Cookie
Type javax.servlet.http.HttpSession (Interface) javax.servlet.http.Cookie
์ €์žฅ ์œ„์น˜ Server์˜ memory์— Object๋กœ ์ €์žฅ Client ์ปดํ“จํ„ฐ์— file๋กœ ์ €์žฅ
์ €์žฅ ํ˜•์‹ Object ๋Š” ๋ชจ๋‘ ๊ฐ€๋Šฅ
( ์ผ๋ฐ˜์ ์œผ๋กœ Dto, List ๋“ฑ ์ €์žฅ )
file์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— String ํ˜•ํƒœ
์‚ฌ์šฉ ์˜ˆ ๋กœ๊ทธ์ธ ์‹œ ์‚ฌ์šฉ์ž ์ •๋ณด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋ชฉ๋ก, ์•„์ด๋”” ์ €์žฅ, ์˜ค๋Š˜์€ ๊ทธ๋งŒ ์—ด๊ธฐ
์šฉ๋Ÿ‰ ์ œํ•œ ์ œํ•œ ์—†์Œ ๋„๋ฉ”์ธ๋‹น 20๊ฐœ, 1์ฟ ํ‚ค๋‹น 4KB
๋งŒ๋ฃŒ ์‹œ์  ์•Œ์ˆ˜ ์—†์Œ
( Client ๊ฐ€ ๋กœ๊ทธ์•„์›ƒ ํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ session ์— ์ ‘๊ทผํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋งŒ๋ฃŒ์‹œ๊ฐ„์€ web.xml์—์„œ ์„ค์ •ํ•œ๋‹ค. )
์ฟ ๊ธฐ ์ €์žฅ์‹œ ์„ค์ •
( ์„ค์ • ์—†์„ ๊ฒฝ์šฐ browser ์ข…๋ฃŒ ์‹œ ๋งŒ๋ฃŒ )
๊ณตํ†ต ์ „์—ญ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— Project ๋‚ด์˜ ๋ชจ๋“  JSP์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ,
MAP ํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Key ๊ฐ’์˜ ์ค‘๋ณต์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

Cookie ์™€ Session ์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด์•˜๋‹ค.
Cookie ์™€ Session ์„ ๋น„์Šทํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ๋™์ž‘์›๋ฆฌ๋„ ๋น„์Šทํ•˜๋‹ค. ์„ธ์…˜๋„ ๊ฒฐ๊ตญ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ Cookie ๋Š” ์„œ๋ฒ„๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Session ์€ ์„œ๋ฒ„์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ํฐ ์ฐจ์ด์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
Session ์ด ๋ณด์•ˆ์ ์œผ๋กœ๋„ ์œ ๋ฆฌํ•ด์„œ Session ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌด๋ถ„๋ณ„ํ•œ Session ์‚ฌ์šฉ์€ ์„œ๋ฒ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ ์ ˆํ•˜๊ฒŒ Session ๊ณผ Cookie ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
์ €์žฅ ์œ„์น˜์™€ ๋ณด์•ˆ ๋ง๊ณ ๋„ ์ฐจ์ด์ ์ด ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด ์žˆ๋‹ค.
Cookie๋Š” ์ฟ ํ‚ค ์ €์žฅ ์‹œ ์„ค์ •ํ•˜๋Š” ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด๋‚˜ ์„ค์ •์ด ์—†์œผ๋ฉด browser ์ข…๋ฃŒ ์‹œ ๋งŒ๋ฃŒ ๋˜๊ณ 
Session์€ Client ๊ฐ€ ๋กœ๊ทธ์•„์›ƒ ํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ Session์— ์ ‘๊ทผํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋งŒ๋ฃŒ๋œ๋‹ค. ๋งŒ๋ฃŒ ์‹œ๊ฐ„์€ web.xml์—์„œ ์„ค์ •ํ•œ๋‹ค.
Cookie์™€ Session์ด ๋น„์Šทํ•œ ์ ์ด ๋งŽ์•„์„œ ์ฐจ์ด์ ์„ ์ž˜ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: