๊ฐœ๋ฐœ/React

[React/AXIOS] localStorage๋ฅผ ์ด์šฉํ•ด์„œ token ์ €์žฅํ•ด ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

hayeonn 2023. 6. 12. 20:21
๋ฐ˜์‘ํ˜•

๐Ÿ“– ์„œ๋‘

๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋˜ ์™€์ค‘ ํšŒ์›๊ฐ€์ž… → ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ๊ณ„์† ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋งŒ์•ฝ token ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์„ค์ •์„ ํ•ด์•ผํ–ˆ๋‹ค. ํ•œ ๋ฒˆ ๋กœ๊ทธ์ธ์„ ํ–ˆ๋‹ค๋ฉด ๊ณ„์† ์œ ์ง€๋ฅผ ์‹œ์ผœ์•ผํ•˜๋ฏ€๋กœ(์ฆ‰ ๋กœ๊ทธ์ธ์„ ํ–ˆ๋‹ค๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.) localStorage๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก token๊ฐ’์„ ์ €์žฅํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

 

๐Ÿ“ localStorage

localStorage๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ Web Storage๋ฅผ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค. ์›น ์Šคํ† ๋ฆฌ์ง€์—๋Š” localStorage์™€ sessionStorage 2์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

๋‘ ๊ฐ€์ง€์˜ ์ฐจ์ด์ ์„ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ์–ด๋–ค ๋ฒ”์œ„๋กœ ๊ณ„์† ๋ณด์กด๋˜์–ด ์žˆ๋Š”์ง€์— ๋‹ฌ๋ ค์žˆ๋‹ค.

localStorage๋Š” ์–ด๋–ค ์„ธ์…˜์— ๋“ค์–ด์™€ ์žˆ์–ด ๊ทธ๊ฒƒ์ด ๋๋‚˜๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š๊ณ  ๋ณด์กด๋˜์–ด ์žˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ™์€ ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ํƒญ์œผ๋กœ ์—ด๋ ค ์‚ฌ์šฉํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์›Œ์ง€์ง€ ์•Š๊ณ  localStorage์˜ ๋‚ด์šฉ์ด ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

sessionStorage๋Š” ๊ฐ ํƒญ๋“ค์ด ๋ณ„๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ ํƒญ ๋˜๋Š” ์ฐฝ์ด ๋‹ซํž ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ๋ฉธํ•˜๊ฒŒ ๋œ๋‹ค. 

 

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๋ณด์กด์‹œ์ผœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด localStorage๋ฅผ ์“ฐ๊ณ  ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กด์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด sessionStorage๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ localStorage์—์„œ ์ €์žฅ(์œ ์ง€)๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋‚ด ์ปดํ“จํ„ฐ, ๋‚ด ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ €์žฅ๋˜์–ด ์žˆ์–ด์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. 

 

๐Ÿ“ ์‚ฌ์šฉ๋ฒ•

// ๋ฐ์ดํ„ฐ ์ €์žฅ
localStorage.setItem("key", value);

// ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ
localStorage.getItem("key");

// ๋ฐ์ดํ„ฐ ์‚ญ์ œ
localStorage.removeItem("key");

// ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ
localStorage.clear();

// ์ €์žฅ๋œ ํ‚ค/๊ฐ’ ์Œ์˜ ๊ฐœ์ˆ˜
localStorage.length;

์šฐ๋ฆฌ๋Š” token ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ ๊ทธ๊ฒƒ์„ setItem์„ ํ†ตํ•ด value์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. 

 

๊ฐœ๋ฐœ์ž๋„๊ตฌ์— ๋“ค์–ด๊ฐ€์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋“ค์–ด๊ฐ€๋ฉด ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํ˜„์žฌ๋Š” ์•„๋ฌด๋Ÿฐ ์ž‘์—…๋„ ํ•˜์ง€ ์•Š์•„์„œ ๋น„์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ์—ฌ๊ธฐ๋‹ค๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ ํ† ํฐ์„ ์ €์žฅํ•˜๋Š” ์ž‘์—…์„ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋‚˜๋Š” ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ axios๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. axios๋ฅผ ํ†ตํ•ด์„œ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„์•ผํ•œ๋‹ค. 

๊ทธ๋•Œ ์‘๋‹ต์œผ๋กœ ๋ฐ›์€ ์ •๋ณด๋ฅผ localStorage์— ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.

 

๊ตฌํ˜„ ์ฝ”๋“œ

axios๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  token์— ์‘๋‹ต๋ฐ›์•˜์„ ๋•Œ์˜ access_token์„ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด์ค€๋‹ค.

์ด๋ ‡๊ฒŒ access_token์œผ๋กœ ์ €์žฅํ•ด์ค€ ์ด์œ ๋Š” ๋‚ด๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ–ˆ์„ ๋•Œ ์‘๋‹ต๋ฐ›์€ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ดค์„ ๋•Œ ๋ฐ‘๊ณผ ๊ฐ™์ด ์ฝ˜์†”์— ์ฐํžˆ๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ ์‘๋‹ต๊ฒฐ๊ณผ(res)์˜ data.access_token์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์ค€ ๊ฒƒ์ด๋‹ค.

 

 

์ด ํ† ํฐ์„ localStorage์— ์ €์žฅํ•ด์•ผํ•˜๋ฏ€๋กœ setItem์„ ํ†ตํ•ด์„œ ์ด ์ •๋ณด๋ฅผ ์ €์žฅํ•ด์ค€๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ํ† ํฐ์ด ์ž˜ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ์ธ์„ ํ–ˆ์œผ๋‹ˆ todoList ํŽ˜์ด์ง€๋กœ ๋ฐ”๋กœ ์ด๋™์„ ์‹œ์ผœ๋ณด์ž.

์ด๋•Œ ๋‚˜๋Š” window.location.replace()๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ด๊ฑธ ์‚ฌ์šฉํ•œ ์ด์œ ๋Š” URL์ด ๊นจ๋—ํ•˜๊ฒŒ ๊ต์ฒด๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. location.replace๋Š” ํžˆ์Šคํ† ๋ฆฌ ์•ˆ์— ์ €์žฅ์ด ์•ˆ๋œ๋‹ค.

์ด ๋ง์€ ์œ ์ €๊ฐ€ back(๋’ค๋กœ๊ฐ€๊ธฐ) ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ ์ด์ „ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ๊ทธ์ธ์„ ํ–ˆ์œผ๋ฏ€๋กœ ๋‹ค์‹œ ๋’ค๋กœ๊ฐ€์„œ ๋กœ๊ทธ์ธ์„ ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ๊นŒ์ง€ํ•˜๋ฉด ๋กœ๊ทธ์ธ ํ›„ ๋ฐ”๋กœ ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค!

 

๊ฒฐ๊ณผ