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

Coding Planet

์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ตฌํ˜„ํ•˜๊ธฐ : url์—์„œ product_id๊ฐ€์ ธ์™€์„œ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ“šํ”„๋กœ์ ํŠธ/๐Ÿ’ณ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ

์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ตฌํ˜„ํ•˜๊ธฐ : url์—์„œ product_id๊ฐ€์ ธ์™€์„œ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๊ธฐ

jhj.sharon 2023. 6. 15. 21:30
๋ฐ˜์‘ํ˜•

 

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

 ์„œ๋ฒ„์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์˜๋ฏธ์—์„œ ๊ทธ ํ•œ๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค.  ์ฒซ์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์„ ๋ถ„์„ํ•  ๋งŒํ•œ ๋งˆ์ผ€ํŒ…์  ๊ฐ€์น˜๊ฐ€ ๋–จ์–ด์ง„๋‹ค. ๋ฌผ๋ก  ๋„“๊ฒŒ ๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ํฅ๋ฏธ ์žˆ๋Š” ์ƒํ’ˆ์„ ํด๋ฆญํ•œ๋‹ค๋Š” ์ ์—์„œ ์˜๋ฏธ๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ '๊ด€์‹ฌ ์ƒํ’ˆ ๋ชฉ๋ก'์ด๋ผ๋Š” ๋” ๋ช…ํ™•ํ•œ ๋งˆ์ผ€ํŒ…์  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ๋ณด๋‹ค๋Š” ๊ทธ ํšจ์šฉ์ด ๋–จ์–ด์ง„๋‹ค. ๋‘˜์งธ, ์‡ผํ•‘๋ชฐ์˜ ๋ชจ๋“  ํšŒ์›์ด ๋“ค์–ด๊ฐ„ ๋ชจ๋“  ํŽ˜์ด์ง€์˜ ์ƒํ’ˆ์„ ์„œ๋ฒ„์— ์ €์žฅํ•˜๊ธฐ์—๋Š” ๊ทธ ์šฉ๋Ÿ‰์ด ๋„ˆ๋ฌด ์ปค์„œ ์„œ๋ฒ„๋น„์šฉ์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค.

 ์ข…ํ•ฉ์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด ๋งˆ์ผ€ํŒ…์  ํšจ์šฉ์ด ํ˜„์ €ํžˆ ์ ์€ '์ตœ๊ทผ ์ƒํ’ˆ ์ €์žฅํ•˜๊ธฐ'๋ฅผ ๊ทธ ๋งŽ์€ ์„œ๋ฒ„๋น„์šฉ์„ ๋“ค์—ฌ๊ฐ€๋ฉด์„œ ์„œ๋ฒ„์— ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  ๋”ฐ๋ผ์„œ  '์ฟ ํ‚ค'๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ์„ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

 

1. ์ฟ ํ‚ค์˜ ์ž‘๋™์›๋ฆฌ ๐Ÿช

์ฟ ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ฟ ํ‚ค๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

1. ์ฟ ํ‚ค ์ƒ์„ฑ ๋ฐ ์„ค์ •:

  • JavaScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ `document.cookie` ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ฟ ํ‚ค ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. `document.cookie`์€ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ์ด๋‹ค.
  •  ์ฟ ํ‚ค์˜ ์ด๋ฆ„, ๊ฐ’, ๋งŒ๋ฃŒ ๋‚ ์งœ, ๊ฒฝ๋กœ, ๋„๋ฉ”์ธ ๋ฐ ๋ณด์•ˆ ์„ค์ • ๋“ฑ์„ ์„ค์ •ํ•œ๋‹ค.
  • ์ด ์ •๋ณด๋Š”  `name=value; expires=date; path=path; domain=domain; secure`์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์„ค์ •๋œ๋‹ค.


2. ์ฟ ํ‚ค ์ €์žฅ:

  • ์ฟ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์„ค์ •๋˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ €์žฅ๋œ ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ์œ ์ง€๋˜๋ฉฐ, ์„ค์ •๋œ ๋งŒ๋ฃŒ ๋‚ ์งœ ์ดํ›„์—๋Š” ์‚ญ์ œ๋œ๋‹ค.
  •  ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ "์ฟ ํ‚ค ์ €์žฅ์†Œ"์— ์ €์žฅ๋œ๋‹ค. ํฌ๋กฌ์—์„œ๋Š” ์ด ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” "์ฟ ํ‚ค ๊ด€๋ฆฌ์ž"๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ฟ ํ‚ค ๊ด€๋ฆฌ์ž๋Š” ์ฃผ์†Œ ์ฐฝ์˜ "์„ค์ •" ๋ฉ”๋‰ด์—์„œ "์ฟ ํ‚ค ๋ฐ ๊ธฐํƒ€ ์‚ฌ์ดํŠธ ๋ฐ์ดํ„ฐ" ์˜ต์…˜์„ ์„ ํƒํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋˜ํ•œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์˜ Application์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

2. ์ฟ ํ‚ค ๋“ฑ๋ก ์ฝ”๋“œ๐Ÿช

  • ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€์—์„œ ์ƒ์„ธํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์œผ๋กœ product_Id๊ฐ’์ด ๋“ค์–ด์˜ค๋„๋ก ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.
  • (http://localhost:8080/stroke/product/productDetail?product_id=72)
  • ์ƒํ’ˆ ์ƒ์„ธํŽ˜์ด์ง€์—์„œ๋Š” url์˜  product_Id ๊ฐ’์„ ๋ฐ›์•„์™€ ์ฟ ํ‚ค์— ๋ˆ„์  ์ €์žฅํ•œ๋‹ค.
  • ์ด ๋•Œ product_Id๋ฅผ ์ค‘๋ณต๋˜์ง€ ์•Š์œผ๋ฉฐ 24์‹œ๊ฐ„ ๋™์•ˆ ์ €์žฅ๋˜๊ณ  ์ž๋™์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค. ์ž‘๋™์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

  • 1) ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋ฉด onPageLoad()ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค window.addEventListener('load', onPageLoad);
  • onPageLoad()์—์„œ๋Š” ์ฟ ํ‚ค ๋“ฑ๋ก์— ํ•„์š”ํ•œ ์ฟ ํ‚ค์˜ key๊ฐ’, value ๊ฐ’, ๋งŒ๋ฃŒ์ผ์„ ์ฟ ํ‚ค ๋“ฑ๋ก ํ•จ์ˆ˜setCookie(cookieName, value, expirationDate)์— ์ „๋‹ฌํ•œ๋‹ค.
//Cookies----------------------------------------------------
// ํŽ˜์ด์ง€ ๋กœ๋“œ ํ›„ ์‹คํ–‰ํ•  ํ•จ์ˆ˜
function onPageLoad() {
  var url = window.location.href;
  var productId = getProductIDFromURL(url);
  console.log("productId::" + productId);

  if (productId) {
    var recentProducts = getCookie('recent_products');
    var recentProductIds = recentProducts ? recentProducts.split('/') : [];
   
    if (!recentProductIds.includes(productId)) {
      recentProductIds.push(productId);
    }

    // ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ์œ ์ง€
    if (recentProductIds.length > 10) {
      recentProductIds.shift();
    }

    recentProducts = recentProductIds.join('/');

    // 24์‹œ๊ฐ„ ํ›„์˜ ์‹œ๊ฐ„ ๊ฐ์ฒด ์ƒ์„ฑ
    var expirationDate = new Date();
    expirationDate.setTime(expirationDate.getTime() + (24 * 60 * 60 * 1000));
    console.log("expirationDate::" + expirationDate);

    // ์ฟ ํ‚ค์— recent_products ์ €์žฅ (์œ ํšจ๊ธฐ๊ฐ„: 24์‹œ๊ฐ„)
    setCookie('recent_products', recentProducts, expirationDate);
  }
}

// ํŽ˜์ด์ง€ ๋กœ๋“œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก
window.addEventListener('load', onPageLoad);


function setCookie(cookieName, value, expirationDate) {
  var cookieValue = escape(value) + ((expirationDate == null) ? '' : '; expires=' + expirationDate.toUTCString());
  document.cookie = cookieName + '=' + cookieValue;
}

function getCookie(cookieName) {
  var name = cookieName + '=';
  var decodedCookie = decodeURIComponent(document.cookie);
  var cookieArray = decodedCookie.split(';');

  for (var i = 0; i < cookieArray.length; i++) {
    var cookie = cookieArray[i];
    while (cookie.charAt(0) == ' ') {
      cookie = cookie.substring(1);
    }
    if (cookie.indexOf(name) == 0) {
      return cookie.substring(name.length, cookie.length);
    }
  }
  return '';
}

//url์—์„œ productId๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜
function getProductIDFromURL(url) {
  var regex = /[?&]product_id=(\d+)/;
  var match = regex.exec(url);
  if (match && match[1]) {
    return match[1];
  }
  return null;
}

//Cookies End----------------------------------------------------
๋ฐ˜์‘ํ˜•
Comments