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

JiYoung Dev ๐Ÿ–ฅ

[React] session/local storage์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ (2023.06.05) ๋ณธ๋ฌธ

full stack/React

[React] session/local storage์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ (2023.06.05)

Shinjio 2023. 6. 5. 11:57

 

Session/Local Storage์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ

 

    /**
     * Local Storage vs Session Storage
     * - ์ฃผ์˜์‚ฌํ•ญ! ๋‘˜ ๋‹ค ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ์„ ํ•˜๋Š” ๋ฐ์ดํ„ฐ
     * - local Storage : ๋™์ผํ•œ PC + ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์ผ ๊ฒฝ์šฐ, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ์Œ
     *      ex. ์ž๋™ ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ...
     *      => ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ €์žฅ๋˜์–ด์žˆ๋‹ค.
     * - session Storage : ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์ด ์ข…๋ฃŒ๋˜๋ฉด ์„ธ์…˜๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์†Œ๋ฉธ๋จ
     *      ex. ๋กœ๊ทธ์ธ ๊ธฐ๋ก
     */

 

๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ ์–ด๋””์„œ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋Š” ์ž์œ 

์ˆœ์„œ์˜ ์ฐจ์ด์ผ๋ฟ!

 

1. Local Storage

์ž๋™ ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ์™€ ๊ฐ™์ด ๋ณด์•ˆ์ด ๋”ฑํžˆ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ

 

1.1. ์ €์žฅํ•˜๊ธฐ

localStorage.setItem('์ด๋ฆ„', ์ €์žฅํ• ๊ฐ’)

 

const setLocal = ()=>{
        console.log('local storage ์ €์žฅ', localText);

        //๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ธฐ
        localStorage.setItem('data', localText)
    }

 

๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„์ ๋˜์ง€ ์•Š์Œ

๋ˆ„์ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ์ €์žฅํ•ด์•ผ ํ•จ!

 

 

1.2. ๊ฐ€์ ธ์˜ค๊ธฐ

localStorage.getItem('๊ฐ€์ ธ์˜ค๊ณ ์‹ถ์€๋ฐ์ดํ„ฐ์ด๋ฆ„')

 

    const getLocal = ()=>{
        //๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด์˜ค๊ธฐ
        setLocalText2(localStorage.getItem('data'))
    }

 

1.3. ์‚ญ์ œํ•˜๊ธฐ

localStorage.removeItem('์‚ญ์ œํ•  ๋ฐ์ดํ„ฐ ์ด๋ฆ„')

 

            {/* .clear() => ์Šคํ† ๋ฆฌ์ง€ ์ดˆ๊ธฐํ™”
            localStorage.clear()
            */}
<button onClick={()=>{window.localStorage.removeItem('data')}}>local storage ์‚ญ์ œ</button>

 

 

2. Session Storage

2.1. ์ €์žฅํ•˜๊ธฐ

sessionStorage.setItem('์ด๋ฆ„', ์ €์žฅํ• ๊ฐ’)

 

const setSession = ()=>{
        console.log('session storage ์ €์žฅ', sessionText);
        sessionStorage.setItem('data', sessionText)
    }

 

 

2.2. ๊ฐ€์ ธ์˜ค๊ธฐ

sessionStorage.getItem('๊ฐ€์ง€๊ณ ์˜ฌ ๋ฐ์ดํ„ฐ ์ด๋ฆ„')

 

    const getSession = ()=>{
        setSessionText2(sessionStorage.getItem('data'))
    }

 

2.3. ์‚ญ์ œํ•˜๊ธฐ

๋ณดํ†ต ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ์— ๋งŽ์ด ์‚ฌ์šฉ

 

sessionStorage.removeItem('์‚ญ์ œํ•  ๋ฐ์ดํ„ฐ ์ด๋ฆ„')
<button onClick={()=>{window.sessionStorage.removeItem('data')}}>session storage ์‚ญ์ œ</button>

 

 

๐ŸŽˆ ๊ตฌํ˜„ ํ™”๋ฉด

 

๐ŸŽˆ ์˜ค๋ฅ˜

too many Render ~~~~ (๋ฌดํ•œ๋ฃจํ”„)

๊ด„ํ˜ธ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์„ ์ˆ˜ ์žˆ์Œ

 

 

๐ŸŽˆ ์ „์ฒด ์ฝ”๋“œ

import React from 'react'
import { useState } from 'react'

const Storage = () => {

    /**
     * Local Storage vs Session Storage
     * - ์ฃผ์˜์‚ฌํ•ญ! ๋‘˜ ๋‹ค ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ์„ ํ•˜๋Š” ๋ฐ์ดํ„ฐ
     * - local Storage : ๋™์ผํ•œ PC + ๋™์ผํ•œ ๋ธŒ๋ผ์šฐ์ €์ผ ๊ฒฝ์šฐ, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ ์˜ฌ ์ˆ˜ ์žˆ์Œ
     *      ex. ์ž๋™ ๋กœ๊ทธ์ธ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ...
     *      => ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๋”๋ผ๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ €์žฅ๋˜์–ด์žˆ๋‹ค. 
     * - session Storage : ๋ธŒ๋ผ์šฐ์ € ์ฐฝ์ด ์ข…๋ฃŒ๋˜๋ฉด ์„ธ์…˜๋„ ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์†Œ๋ฉธ๋จ
     *      ex. ๋กœ๊ทธ์ธ ๊ธฐ๋ก
     */

    const [localText, setLocalText] = useState('')
    const [localText2, setLocalText2] = useState('')
    const setLocal = ()=>{
        console.log('local storage ์ €์žฅ', localText);

        //๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ธฐ
        localStorage.setItem('data', localText)
    }
    const getLocal = ()=>{
        //๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด์˜ค๊ธฐ
        setLocalText2(localStorage.getItem('data'))
    }

    const [sessionText, setSessionText] = useState('')
    const [sessionText2, setSessionText2] = useState('')
    const setSession = ()=>{
        console.log('session storage ์ €์žฅ', sessionText);
        sessionStorage.setItem('data', sessionText)
    }
    const getSession = ()=>{
        setSessionText2(sessionStorage.getItem('data'))
    }
    

  return (
    <div className='list-container'>
        <div>
        <h2>Local Storage : </h2>
        <input type="text" onChange={(e)=>{setLocalText(e.target.value)}}></input>
        <button onClick={setLocal}>์ €์žฅ</button>
        <button onClick={getLocal}>๊ฐ€์ ธ์˜ค๊ธฐ</button><br></br>
        {localText2}
        </div>

        <div>
        <h2>Session Storage : </h2>
        <input type="text" onChange={(e)=>{setSessionText(e.target.value)}}></input>
        <button onClick={setSession}>์ €์žฅ</button>
        <button onClick={getSession}>๊ฐ€์ ธ์˜ค๊ธฐ</button><br/>
        {sessionText2}
        </div>

        <div>
            {/* .clear() => ์Šคํ† ๋ฆฌ์ง€ ์ดˆ๊ธฐํ™”
            localStorage.clear()
            */}

            <button onClick={()=>{window.localStorage.removeItem('data')}}>local storage ์‚ญ์ œ</button>
            <button onClick={()=>{window.sessionStorage.removeItem('data')}}>session storage ์‚ญ์ œ</button>
        </div>
    </div>
  )
}

export default Storage