๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
5๏ธโƒฃ CS/Web

[Web] ์ฟ ํ‚ค์™€ ์„ธ์…˜

by seolhee2750 2022. 9. 22.

์˜ค๋Š˜์€ ์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ๊ฐœ๋…, ๋™์ž‘ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ–ˆ๋‹ค.

 

๐Ÿ“Ž ์ฟ ํ‚ค์™€ ์„ธ์…˜

์ฟ ํ‚ค์™€ ์„ธ์…˜์€ HTTP protocol์˜ ์•ฝ์  ๋ณด์™„์„ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

HTTP protocol์˜ ํŠน์ง•

  1. Connectionless ํ”„๋กœํ† ์ฝœ
    ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญํ–ˆ์„ ๋•Œ, ๊ทธ ์š”์ฒญ์— ๋งž๋Š” ์‘๋‹ต์„ ๋ณด๋‚ธ ํ›„ ์—ฐ๊ฒฐ์„ ๋Š๋Š” ์ฒ˜๋ฆฌ๋ฐฉ์‹
  2. Stateless ํ”„๋กœํ† ์ฝœ
    ์ปค๋„ฅ์…˜์„ ๋Š๋Š” ์ˆœ๊ฐ„ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ํ†ต์‹ ์ด ๋๋‚˜๋ฉฐ, ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ

๐Ÿ‘‰ client์™€ server๊ฐ€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ ๋ฐœ์ƒ (๋กœ๊ทธ์ธ ์ •๋ณด ๋“ฑ)

๐Ÿ‘‰ client ๋‹จ์œ„๋กœ ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ฟ ํ‚ค์™€ ์„ธ์…˜์ด ํ•„์š”ํ•จ


๐Ÿ“Ž ์ฟ ํ‚ค

์ฟ ํ‚ค์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ ๋กœ์ปฌ์— ์ €์žฅ๋˜๋Š” Key-Value  ์Œ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ (String ํ˜•ํƒœ)
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•„๋„ ๋ธŒ๋ผ์šฐ์ €๋Š” request ์‹œ Request Header๋ฅผ ๋„ฃ์–ด ์ž๋™์œผ๋กœ ์ „์†ก
  • ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ์ €์žฅ๋˜๋Š” ์ฟ ํ‚ค๋Š” ๋‹ค๋ฆ„ (์„œ๋ฒ„์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋กœ ์ธ์‹)

 

์ฟ ํ‚ค์˜ ์‚ฌ์šฉ ๋ชฉ์ 

  • ์„ธ์…˜ ๊ด€๋ฆฌ : ์‚ฌ์šฉ์ž ์•„์ด๋””, ์ ‘์† ์‹œ๊ฐ„, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋“ฑ ์„œ๋ฒ„๊ฐ€ ์•Œ์•„์•ผ ํ•  ์ •๋ณด ์ €์žฅ
  • ๊ฐœ์ธํ™” : ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ทธ ์‚ฌ๋žŒ์— ์ ์ ˆํ•œ ํŽ˜์ด์ง€ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ
  • ํŠธ๋ž˜ํ‚น : ์ƒˆ์šฉ์ž์˜ ํ–‰๋™๊ณผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๊ณ  ๊ธฐ๋ก

 

์ฟ ํ‚ค ์‚ฌ์šฉ ์˜ˆ์‹œ

  • ID ์ €์žฅ (์ž๋™ ๋กœ๊ทธ์ธ)
  • ์ผ์ฃผ์ผ๊ฐ„ ๋‹ค์‹œ ๋ณด์ง€ ์•Š๊ธฐ
  • ์ตœ๊ทผ ๊ฒ€์ƒ‰ํ•œ ์ƒํ’ˆ๋“ค์„ ๊ด‘๊ณ ์— ์ถ”์ฒœ
  • ์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ

 

์ฟ ํ‚ค์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • ์ด๋ฆ„ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฟ ํ‚ค๊ฐ€ client ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜๋ฏ€๋กœ, ๊ฐ ์ฟ ํ‚ค๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
  • ๊ฐ’ : ์ฟ ํ‚ค์˜ ์ด๋ฆ„๊ณผ ๋งคํ•‘๋˜๋Š” ๊ฐ’
  • ์œ ํšจ ๊ธฐ๊ฐ„ : ์ฟ ํ‚ค์˜ ์œ ํšจ ๊ธฐ๊ฐ„
  • ๋„๋ฉ”์ธ : ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋„๋ฉ”์ธ
  • ๊ฒฝ๋กœ : ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ์š”์ฒญ ๊ฒฝ๋กœ

 

์ฟ ํ‚ค์˜ ๋™์ž‘ ๋ฐฉ์‹

  1. Client๊ฐ€ Server์— ํŽ˜์ด์ง€ ์š”์ฒญ
  2. Server๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (id, password ๊ฒ€์‚ฌ ๋“ฑ) ํ›„ Cookie๋ฅผ ์ƒ์„ฑ
  3. HTTP Header์— Cookie๋ฅผ ๋„ฃ์–ด ์‘๋‹ต
  4. Browser๋Š” ๋ฐ›์€ Cookie๋ฅผ PC์— ์ €์žฅ, ๋‹ค์‹œ Server์— ์š”์ฒญํ•  ๋•Œ ์š”์ฒญ๊ณผ ํ•จ๊ป˜ Cookie ์ „์†ก
  5. Browser๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ Cookie์˜ ์œ ํšจ ๊ธฐ๊ฐ„์ด ๋‚จ์•„์žˆ๋‹ค๋ฉด Client๋Š” ๊ณ„์† ๋ณด๊ด€
  6. ๋™์ผ ์‚ฌ์ดํŠธ ์žฌ๋ฐฉ๋ฌธ ์‹œ Client์˜ PC์— ํ•ด๋‹น Cookie๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์š”์ฒญ ํŽ˜์ด์ง€์™€ ํ•จ๊ป˜ Cookie ์ „์†ก

 

Cookie ์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ method
์ƒ์„ฑ Cookie cookie = new Cookie(String name, String value);
๊ฐ’ ๋ณ€๊ฒฝ / ์–ป๊ธฐ cookie.setValue(String value);
String value = cookie.getValue();
์‚ฌ์šฉ์ž ๋„๋ฉ”์ธ ์ง€์ • / ์–ป๊ธฐ cookie.setDomain(String domain);
String value = cookie.getDomain();
๊ฐ’ ๋ฒ”์œ„ ์ง€์ • / ์–ป๊ธฐ cookie.setPath(String path);
String path = cookie.getPath();
cookie ์œ ํšจ ๊ธฐ๊ฐ„ ์ง€์ • / ์–ป๊ธฐ cookie.setMaxAge(int expiry);
Int expiry = cookie.getMaxAge();
cookie.setMaxAge(0); // ์œ ํšจ ๊ธฐ๊ฐ„์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ ๊ฐ€๋Šฅ
์ƒ์„ฑ๋œ cookie๋ฅผ client์— ์ „์†ก response.addCookie(cookie);
client์— ์ €์žฅ๋œ cookie ์–ป๊ธฐ Cookie cookies[] = request.getCookies();

๐Ÿ“Ž ์„ธ์…˜

์„ธ์…˜์˜ ๊ฐœ๋…๊ณผ ํŠน์ง•

  • ๋ฐฉ๋ฌธ์ž๊ฐ€ ์›น ์„œ๋ฒ„์— ์ ‘์†ํ•ด ์žˆ๋Š” ์ƒํƒœ๋ฅผ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ณด๊ณ , ๊ทธ๊ฒƒ์„ ์„ธ์…˜์ด๋ผ๊ณ  ํ•จ
  • WAS์˜ memory์— Object ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
  • memory๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์šฉ๋Ÿ‰๊นŒ์ง€ ์ œํ•œ ์—†์ด ์ €์žฅ ๊ฐ€๋Šฅ
  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ฑฐ๋‚˜ ์„œ๋ฒ„์—์„œ ์„ธ์…˜์„ ์‚ญ์ œํ–ˆ์„ ๋•Œ๋งŒ ์‚ญ์ œ๋˜๋ฏ€๋กœ, ์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ์ด ์ข‹๋‹ค.
  • ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๊ณ ์œ  session-id๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์š”๊ตฌ์— ๋งž๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•จ

 

์„ธ์…˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

  • site ๋‚ด์—์„œ ํ™”๋ฉด์„ ์ด๋™ํ•ด๋„ ๋กœ๊ทธ์ธ(์‚ฌ์šฉ์ž ์ •๋ณด)์ด ์œ ์ง€
  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ

 

์„ธ์…˜ ๋™์ž‘ ๋ฐฉ์‹

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

 

HttpSession ์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ method
์ƒ์„ฑ HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
๊ฐ’ ์ €์žฅ session.serAttribute(String name, Object value);
๊ฐ’ ์–ป๊ธฐ Object obj = session.getAttribute(String name);
๊ฐ’ ์ œ๊ฑฐ session.removeAttribute(String name); // ํŠน์ • ์ด๋ฆ„์˜ ์†์„ฑ ์ œ๊ฑฐ
session.invalidate(); // ๋ฐ”์ธ๋”ฉ๋˜์–ด์žˆ๋Š” ๋ชจ๋“  ์†์„ฑ ์ œ๊ฑฐ
์ƒ์„ฑ ์‹œ๊ฐ„ long ct = session.getCreationTime();
๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„ long lat = session.getLastAccessedTime();

๐Ÿ“Ž ์ฟ ํ‚ค์™€ ์„ธ์…˜ ์ •๋ฆฌ

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

๐Ÿ‘‰ ์ฟ ํ‚ค์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ฒ˜์Œ ๋งŒ๋“  ์‹œ๊ฐ„๋ถ€ํ„ฐ ์œ ํšจ ๊ธฐ๊ฐ„์„ ์ •ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž์˜ ๋งˆ์ง€๋ง‰ ์ ‘๊ทผ ์‹œ๊ฐ„์œผ๋กœ๋ถ€ํ„ฐ ์‹œ๊ฐ„์„ ์ธก์ •ํ•จ (web.xml์—์„œ ์„ค์ •)
๊ณตํ†ต์  ์ „์—ญ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— project ๋‚ด์˜ ๋ชจ๋“  JSP์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ
Map ํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— key ๊ฐ’์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

 

์ฟ ํ‚ค๊ณผ ์„ธ์…˜์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„ธ์…˜์ด ์ฟ ํ‚ค์— ๋น„ํ•ด ๋ณด์•ˆ์ด ๋†’์€ ํŽธ์ด๋‚˜, ์„ธ์…˜์€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋ฉฐ ์„œ๋ฒ„์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—

์„œ๋ฒ„ ์ž์›์— ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ ์ž์› ๊ด€๋ฆฌ ์ฐจ์›์—์„œ ์ฟ ํ‚ค์™€ ์„ธ์…˜์„ ์ ์ ˆํ•œ ์š”์†Œ ๋ฐ ๊ธฐ๋Šฅ์— ๋ณ‘ํ–‰ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

'5๏ธโƒฃ CS > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Web] SSR๊ณผ CSR (feat. MPA์™€ SPA)  (2) 2022.09.29
[Web] CSV, XML, JSON  (0) 2022.09.18

๋Œ“๊ธ€