๐Ÿ“‚ WEB

์ฟ ํ‚ค(Cookie)

Amenable 2023. 3. 28. 22:00

  HTTP ํ”„๋กœํ† ์ฝœ ํ™˜๊ฒฝ์€ Connectionless์™€ Stateless ํ•œ ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ํŠน์„ฑ์ด ์žˆ๋‹ค. 
( Connectionless : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ํ•œ ํ›„ ์‘๋‹ต์„ ๋ฐ›์œผ๋ฉด ๊ทธ ์—ฐ๊ฒฐ์„ ๋Š์–ด ๋ฒ„๋ฆฌ๋Š” ํŠน์ง•
Stateless : ํ†ต์‹ ์ด ๋๋‚˜๋ฉด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ํŠน์ง• )
  ์ด๋Š” ๋กœ๊ทธ์ธ๊ณผ ๊ฐ™์ด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Cookie์™€ Session์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฒˆ ๊ธ€์„ ํ†ตํ•ด Cookie์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

1. ๊ฐœ๋… ๐Ÿ‘จ‍๐Ÿ’ป

  ์ฟ ํ‚ค(Cookie)๋ž€ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €) ๋กœ์ปฌ์— ์ €์žฅ๋˜๋Š” ํ‚ค์™€ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด๋‹ค. 
  ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ 

  • ์‚ฌ์šฉ์ž ์•„์ด๋”” ๋“ฑ์˜ ์ •๋ณด ์ €์žฅ - ์„ธ์…˜๊ด€๋ฆฌ
  • ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ - ๊ฐœ์ธํ™”
  • ์‚ฌ์šฉ์ž์˜ ํ–‰๋™๊ณผ ํŒจํ„ด์„ ๋ถ„์„ํ•˜๊ณ  ๊ธฐ๋ก - ํŠธ๋ž˜ํ‚น

๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ํŠน์ง• ๐Ÿ‘จ‍โš•๏ธ

  • ์ฟ ํ‚ค๋Š” Key์™€ Value๋กœ ๊ตฌ์„ฑ๋˜๊ณ  Stringํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ์œ ํšจ ์‹œ๊ฐ„์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ธ์ฆ์ด ์œ ์ง€๋œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์— 300๊ฐœ๊นŒ์ง€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ๋‹น 20๊ฐœ์˜ ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  ํ•˜๋‚˜์˜ ์ฟ ํ‚ค๊ฐ’์€ 4KB(=4098byte)๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•„๋„ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ Request์‹œ์— Request Header์— ๋„ฃ์–ด์„œ ์ž๋™์œผ๋กœ ์„œ๋ฒ„์— ์ „์†กํ•œ๋‹ค.

 

3. ๋™์ž‘ ์ˆœ์„œ ๐Ÿ‘จ‍โš–๏ธ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ
  2. ์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑ
  3. HTTP ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ํฌํ•จ์‹œ์ผœ ์‘๋‹ต
  4. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์ฟ ํ‚ค ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ์Œ
  5. ๊ฐ™์€ ์š”์ฒญ์„ ํ•  ๊ฒฝ์šฐ HTTP ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ํ•จ๊ป˜ ๋ณด๋ƒ„
  6. ์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค๋ฅผ ์ฝ์–ด ์ด์ „ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์ฟ ํ‚ค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์ฟ ํ‚ค๋ฅผ HTTP ํ—ค๋”์— ํฌํ•จ์‹œ์ผœ ์‘๋‹ต

 

4. ๊ตฌ์„ฑ ์š”์†Œ ๐Ÿ‘ฉ‍๐Ÿซ

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

 

5. ์„ค์ • ๋ฐฉ๋ฒ• ๐Ÿ‘ฉ‍๐Ÿ”ฌ

// ์ƒ์„ฑ (์ด๋ฆ„๊ณผ ๊ฐ’์„ ํ•จ๊ป˜ ์ง€์ •)
Cookie cookie = new Cookie(String name, String value);
// ์œ ํšจ์‹œ๊ฐ„ ์„ค์ •
cookie.setMaxAge(int expiry); 
// ๋„๋ฉ”์ธ ์„ค์ •
cookie.setDomain(String domain);
// ๊ฒฝ๋กœ ์„ค์ •
cookie.setPath(String path);
// ์ƒ์„ฑ๋œ cookie๋ฅผ client์— ์ „์†ก
response.addCookie(cookie);

  ์œ ํšจ์‹œ๊ฐ„์€ ์ดˆ ๋‹จ์œ„๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋งŒ์•ฝ ํ•˜๋ฃจ๋ฅผ ์œ ํšจ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 60 x 60 x 24๋ฅผ ๊ฐ’์œผ๋กœ ์ž…๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

 

6. ๋ฌธ์ œ์  ๋ฐ ์ฃผ์˜์  ๐Ÿ‘จ‍โœˆ๏ธ

  • HTTP ์š”์ฒญ ์‹œ ํ•ญ์ƒ ์ฟ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ์— ํŠธ๋ž˜ํ”ฝ์„ ์ถ”๊ฐ€๋กœ ์œ ๋ฐœํ•œ๋‹ค.
  • '์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ' ๋“ฑ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€
RyanGomdoriPooh ๋‹˜์˜ '์ฟ ํ‚ค์™€ ์„ธ์…˜ ๊ฐœ๋…',
๊น€์˜ํ•œ ๋‹˜์˜ '๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹'
์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.