๐ก localStorage vs Cookie ๋ง๋ฃ์๊ฐ ์ค์ ํ๊ธฐ
๋ก๊ทธ์ธํ ๋ jwt web token์ ๋ฐ์์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅํด ๋๊ณ api ํธ์ถ์ ํ ๋๋ง๋ค ๊บผ๋ด ์ธ ๋๊ฐ ๋ง๋ค.
๋ฐ๋ก ๋ง๋ฃ์๊ฐ์ ์ ํด๋๊ณ ์ฐ์ง๋ ์์๋๋ฐ, ์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ก์ง์ด ์์ ๋๊ณ ํ๋ฉด์ ํ ํฐ ์์ฒด๋ฅผ ์ง์๋ด์ ์๋๋ก๊ทธ์์์ ์์ผ๋ฒ๋ ค์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
๊ทธ๋์ ๋ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ์๋ localStorage์ ํ ํฐ์ ์ ์ฅํด๋๊ณ ์ฌ์ฉํ๋๋ฐ, localStorage์ ์ ์ฅํ์ง ์๊ณ ์ฟ ํค๋ sessionStorage์ ์ ์ฅํด์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํด์ผ ํ๋ ๊ฑธ๊น? ๋ผ๋ฉฐ ์ด๋ฆฌ์ ๋ฆฌ ๊ฒ์์ ํด๋ณด์๋ค. ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ๋ง๋ฃ์๊ฐ์ ์ ์ฅํด์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ ์์๋ค. ๊ทธ๋์ ๋ ๋ค๋ฅธ ๊ณ ๋ฏผ์ ๋น ์ก๋ค. ์ด๋ค ๊ฒ ๋ ์ข์ ๋ฐฉ๋ฒ์ผ๊น?
1. localStorage์ ๋ง๋ฃ์๊ฐ ์ค์ ํ๊ธฐ
๋ก์ปฌ์คํธ๋ก์ง๋ ๋ธ๋ผ์ฐ์ ํญ์ ๋ซ์๋ ์ญ์ ๊ฐ ๋์ง ์๋ ์๊ตฌ์ ์ธ ์ ์ฅ์์ด๋ค. ๊ทธ๋์ ๋ฐ๋ก ๋ง๋ฃ์๊ฐ์ ์ค์ ํ ์ ์๋ ๊ทธ๋ฐ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ ์๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ ์ ํจ์๊ฐ์ ์ค์ ํด์ ํ ํฐ์ ์ง์์ฃผ๋ฉด ๋ง์น ์๋์ผ๋ก ์ฌ๋ผ์ง ๊ฒ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๋ค.
๊ทธ๋์ Token์ ์ ์ฅํ ๋ ์ ํจ์๊ฐ์ ํจ๊ป ์ ์ฅํด ์ฃผ๊ณ ๊ทธ ์๊ฐ์ด ํ์ฌ์ ์๊ฐ๋ณด๋ค ์ง๋์ณค์ ๋ ํ ํฐ์ ์ง์์ฃผ๋ฉด ๋๋ค.
์๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ดํดํ์๊ธฐ ์ฌ์ธ๊ฑฐ์์. ์ฃผ์๋ ๋ฌ์๋ณด์๋ต๋๋ค.
//localstorage save with expires date
//setItem
export const setWithExpire = (key, value, exp) =>{
let now = new Date() //ํ์ฌ ๋ ์ง์ ์๊ฐ
const item = { value: value, expires : now.getTime() + exp*60*1000*1000}
// item์ ํํ๋ก ๋ก์ปฌ์ ์ ์ฅํด์ค๋ค expires๋ ๋ง๋ฃ์๊ฐ
localStorage.setItem(key, JSON.stringify(item))
}
//getItem
export const getWithExpire = (key) => {
//keys๋ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ์ด๋ฆ์ผ๋ก
const itemStr = localStorage.getItem(key)
//key์ ํด๋นํ๋ value๋ฅผ ๋ค๊ณ ์จ๋ค.
if(!itemStr){
return null
}
//JSON.parse๋ฅผ ์ฌ์ฉํด JSON๋ฌธ์์ด์ javascript๊ฐ์ฒดํํด์ค๋ค.
const item = JSON.parse(itemStr)
//ํ์ฌ ๋ ์ง์ ์๊ฐ
const now = new Date()
//ํ์ฌ ์๊ฐ์ด ๋ง๋ฃ์๊ฐ๋ณด๋ค ๋์ด๊ฐ๋ฉด ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์๋ ์ ์ฅ๋ ๊ฒ์ ์ง์์ค๋ค.
if(now.getTime() > item.expires){
localStorage.removeItem(key)
return null
}
//์๊ฐ์ ๋์ง ์์๋ค๋ฉด ํด๋น value๋ฅผ ๋ฐํํด์ค๋ค
return item.value
}
2. Cookies์ ๋ง๋ฃ์๊ฐ๊ณผ ํจ๊ป ์ ์ฅํ๊ธฐ
์ค๋๋ง์ ์ฟ ํค์ ๋ญ๊ฐ๋ฅผ ์ ์ฅํ๋ ์ฝ๋๋ฅผ ์จ์ ์ค๊ฐ์ ์์ฒญ ๋ฒ๋ฒ ๊ฑฐ๋ ธ๋ค. ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ์ ๋ญ๊ฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ์์ฃผ ์ฌ์ฉํ๋ ์ฟ ํค. ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ ์ฌ์ด์ฆ์ ์ ํ์ด ์๊ณ , expire, path, domain ๋ฑ ์ฌ๋ฌ ์์ฑ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐํด์ ์ฌ์ฉํ ์ ์๋ค๋ ์ด์ ์ด ์๋ค. ์ ์ฒ๋ผ react ํ๋ก์ ํธ๋ฅผ ํ์๋ ๋ถ๋ค์ react-cookie๋ผ๋ ํจํค์ง๋ ์์ด์ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํด์ ๋์ฑ ๊ฐํธํ๊ฒ ๊ตฌํํ์ค ์ ์๋ค. ์ ๋ ์ฃผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ์ฌ์ฉํ์๋ ๊ธฐ์ต์ด ๋ง์์ ๊ทธ ๊ธฐ์ต์ ๋๋ฌ์ด ์์ฑํด ๋ณด์๋ค.
//์ฟ ํค์ ์ ์ฅํ๊ธฐ
export const getCookies = (name) => {
let value = ';'+document.cookie;
let parts = value.split("; " + name + "=");
if(parts.length === 2){
return parts.pop().split(';').shift();
}
}
//์ฟ ํค์ ์
ํ
ํด์ฃผ๊ธฐ
export const setCookies = (name, value, exp ) => {
let date = new Date();
date.setTime(date.getTime() + exp*60*1000);
document.cookie = `${name}=${value}; expires=${date.toUTCString()}`;
}
//์ฟ ํค์์ ์ญ์ ~
export const deleteCookies = (name) => {
let date = new Date("2020-01-01").toUTCString();
console.log(date);
document.cookie = name+"=; expires="+date;
}
๊ทธ๋์ ๋ ์ค์ ๋ญ?
๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ํจ์๊ฐ์ ์ ์ฅํด์ ์ฌ์ฉํ๊ธฐ!
์๋์ ์ฒซ๋ฒ์งธ ์ด์ ๋นผ๊ณ ๋ ์ฌ์ค ์ฟ ํค ๋จ์ ์ผ๋ก ์ธํด์์ด๋ค.
1. localStorage๋ฅผ ๋ง์ด ํ์ฉ. ์ด๋ฏธ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ๋ง ๋ง์ ๊ฒ์ ๋ด์ ์ฐ๊ณ ์๋ ์ํฉ์ด๊ธฐ๋ ํ๊ณ , ํ์ฌ ํ๋ก์ ํธ์ ๊ฐ๊ธฐ ์๋ํฌ์ธํธ๊ฐ ๋ค๋ฅธ token์ด ๋ ๊ฐ์ง๊ฐ ์๋๋ฐ, ๋ฐ๋ก ์ฐ๊ฒ ๋๋ฉด ๋ถํธํจ์ด ์์ ๊ฒ์ด๋ผ๋ ํ๋จ์ด ์์์ต๋๋ค.
2. ๋ณด์์ ์ทจ์ฝํ๋ค. ์ฟ ํค๊ฐ์ ๊ทธ๋๋ก ์์ฒญํ๋ค
3. ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์น๋ธ๋ผ์ฐ์ ์์ ์ ์ฅํ ์ฟ ํค๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
4.์ฌ์ฉ์๊ฐ ๋ณด์์์ ๋ฌธ์ ๋ก ๊ฑฐ๋ถํ ๊ฒฝ์ฐ ์ฌ์ฉ ๋ถ๊ฐํจ
5. ๋คํธ์ํฌ ๋ถํ : ์ฟ ํค์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ ๋คํธ์ํฌ ๋ถํ๊ฐ ์ปค์ง
์ฐธ๊ณ ์๋ฃ
'๊ฐ๋ฐ > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
forEach vs map() ์ฐจ์ด์ (0) | 2024.05.18 |
---|---|
e.preventDefault() ์ stopPropagation() ์ ์ฐจ์ด์ (0) | 2023.11.21 |
[์๋ฐ์คํฌ๋ฆฝํธ] js vs jsx ? ํ์ฅ์ ๋ญ๊ฐ ๋ค๋ฅด์ง? (0) | 2022.12.30 |
Fetch API - ์ด๋ฏธ์ง fetchingํ๊ธฐ (0) | 2022.09.28 |
http Content-Type : application/x-www-form-urlencoded (0) | 2022.09.19 |