๐Ÿ’พ Zustand persist๋กœ ์ƒํƒœ ๋ฐ์ดํ„ฐ ์Ÿ์—ฌ๋‘๊ธฐ

zizonyoungjunยท2025๋…„ 1์›” 15์ผ
8
post-thumbnail

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด, ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ์–ธ์ œ๋‚˜ ํ’€๊ธฐ ์–ด๋ ค์šด ์ˆ™์ œ ์ค‘ ํ•˜๋‚˜๋กœ ๋‹ค๊ฐ€์˜ต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์„ค์ •์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํƒญ์—์„œ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๋“ฑ, ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ด ๊ณ„์†ํ•ด์„œ ์Ÿ์•„์ง€์ฃ . ํŠนํžˆ, ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ์•ฑ ์ข…๋ฃŒ ํ›„์—๋„ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋” ๋งŽ์€ ๊ณ ๋ฏผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๋ฐœํ•˜๋Š” ์ƒํ™ฉ์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์ข‹์€ ๊ฒฝํ—˜์ด ์•„๋‹ˆ๋‹ˆ๊นŒ์š” ๐Ÿ˜ฎโ€๐Ÿ’จ

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ Zustand persist์ž…๋‹ˆ๋‹ค. Zustand๋Š” ๋ณธ๋ž˜ ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ, persist ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ํƒญ ๋‹ซ๊ธฐ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋„ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜์–ด, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋งค๋„๋Ÿฝ๊ฒŒ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Zustand persist์˜ ์›๋ฆฌ์™€ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ๊ณผ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๋ฉฐ ์ด ๋„๊ตฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ด๋–ป๊ฒŒ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ‘€

Zustand persist๋ž€ ๋ฌด์—‡์ธ๊ณ 

Zustand persist๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ(localStorage๋‚˜ sessionStorage)์— ์ €์žฅํ•จ์œผ๋กœ์จ, ์ƒˆ๋กœ๊ณ ์นจ์ด๋‚˜ ์ข…๋ฃŒ์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋„ ์ƒํƒœ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Zustand ์Šคํ† ์–ด ์ฝ”๋“œ์— ๋ช‡ ์ค„์˜ ์„ค์ •๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์ƒํƒœ ์ €์žฅ๊ณผ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ์ง๋ ฌํ™”(serialize) ๋ฐ ์—ญ์ง๋ ฌํ™”(deserialize) ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ง๋ ฌํ™”๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ JSON ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ์— ์ €์žฅ๋˜๊ณ , ์ดํ›„ ์—ญ์ง๋ ฌํ™”๋ฅผ ํ†ตํ•ด JSON ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ณต์›ํ•˜์—ฌ ์›๋ž˜ ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ๊ณ ์นจ๋˜๋”๋ผ๋„ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

Zustand persist๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด, zustand/middleware ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ƒํƒœ๋ฅผ localStorage์— ์ €์žฅํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

import create from "zustand";
import { persist } from "zustand/middleware";

const useStore = create(
  persist(
    (set) => ({
      count: 0,
      increment: () => set((state) => ({ count: state.count + 1 })),
    }),
    {
      name: "counter-storage", // localStorage์— ์ €์žฅ๋  ํ‚ค
    }
  )
);

export default useStore;

์œ„ ์ฝ”๋“œ์—์„œ persist ๋ฏธ๋“ค์›จ์–ด๋Š” Zustand ์Šคํ† ์–ด๋ฅผ ํ™•์žฅํ•˜์—ฌ, ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ localStorage์— ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ ์ด๋ฅผ ๋ณต๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, count ๊ฐ’์€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ด์–ด๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

persist ํ•จ์ˆ˜์˜ name ์˜ต์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ํ‚ค ์ด๋ฆ„์„ ์ •์˜ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ ์„ค์ •๊ณผ ํ™œ์šฉ

Zustand persist๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ localStorage๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ,์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŠน์„ฑ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ sessionStorage๋‚˜ IndexedDB์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ์ €์žฅ์†Œ๋กœ ์œ ์—ฐํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ ๋•๋ถ„์— ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์— ๋งž๋Š” ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

localStorage์™€ sessionStorage

๊ทธ๋ ‡๋‹ด ์ด๋“ค์€ ๊ฐ๊ฐ ์–ด๋–ค ํŠน์ง•์ด ์žˆ์„๊นŒ์š”? ์šฐ์„ , localStorage๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžŒ ํ›„์—๋„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ง€์šฐ์ง€ ์•Š๋Š” ์ด์ƒ ์ง€์†์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํŠน์„ฑ ๋•๋ถ„์— ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํƒœ, ๋‹คํฌ ๋ชจ๋“œ ์„ค์ •์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์„ ๋ณด์กดํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

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

์ปค์Šคํ…€ ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•œ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ

์ด๋Ÿฌํ•œ ๋‚ด์žฅ ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ๋‹ค๋ฉด, ์ปค์Šคํ…€ ์ €์žฅ์†Œ๋ฅผ ์„ค์ •ํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, IndexedDB๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊ด€๋ฆฌ์— ์ ํ•ฉํ•œ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‡ผํ•‘๋ชฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ์ž ๊ตฌ๋งค ๋‚ด์—ญ์„ ์žฅ๊ธฐ๊ฐ„ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜, ๊ฒŒ์ž„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ €์žฅ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ํ˜‘์—… ๋„๊ตฌ์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๊ฐ€ ํ•„์ˆ˜์ ์ธ ๊ฒฝ์šฐ, ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋Š” ์ปค์Šคํ…€ ์ €์žฅ์†Œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ค‘์•™ ์ง‘์ค‘์‹ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํŒ€์› ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์ €์žฅ์†Œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ, ์ €์žฅํ•˜๊ธฐ, ์‚ญ์ œํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋งŒ ์ •์˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Zustand persist์™€ ์†์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•˜์—ฌ ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ์ €์žฅ์†Œ๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Zustand persist๊ฐ€ ์ ํ•ฉํ•œ ์ƒํ™ฉ

์ด๋ ‡๋“ฏ Zustand persist๋Š” ์ƒํƒœ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”, Zustand persist๊ฐ€ ํŠนํžˆ ํ™œ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ

์„œ๋ฒ„์™€ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š” ์—†๋Š” ์ƒํƒœ๋ผ๋ฉด Zustand persist๋Š” ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ํšจ๊ณผ์ ์ธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹คํฌ ๋ชจ๋“œ๋‚˜ ์–ธ์–ด ์„ค์ •๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์„ค์ •์€ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์„ค์ •์ด ์œ ์ง€๋˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์žฌ๋ฐฉ๋ฌธํ•  ๋•Œ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ†ต์‹ ์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต์„ฑ๊ณผ ๋”๋ถˆ์–ด ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌํ•จํ•œ ์„œ๋น„์Šค

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

๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋‚ฎ์€ ์ƒํƒœ ๊ด€๋ฆฌ

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

์—ฌ๋Ÿฌ ํƒญ์ด๋‚˜ ์ฐฝ์—์„œ ์ƒํƒœ ๋™๊ธฐํ™”

๋ธŒ๋ผ์šฐ์ €์˜ ์—ฌ๋Ÿฌ ํƒญ์ด๋‚˜ ์ฐฝ์—์„œ ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค. Zustand persist๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ localStorage์™€ storage ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ํƒญ์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค๋ฅธ ํƒญ์—์„œ๋„ ์ฆ‰์‹œ ๋ฐ˜์˜๋œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ˜ผ๋ž€ ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ ์„œ๋น„์Šค์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ณ  ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

๋„์ž… ์‹œ ์œ ์˜ ์‚ฌํ•ญ

์ด๋ ‡๋“ฏ Zustand persist๋Š” ์ƒํƒœ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ชจ๋“  ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ๋„๊ตฌ๊ฐ€ ๊ทธ๋ ‡๋“ฏ, ์ ์ ˆํ•œ ์ƒํ™ฉ์— ํ™œ์šฉํ•ด์•ผ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ  ๐Ÿ˜คย ์ž˜๋ชป๋œ ์‚ฌ์šฉ์€ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ฑฐ๋‚˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋„์ž… ์ „ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์„ ๊ผผ๊ผผํžˆ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์— ๋Œ€ํ•œ ๋ณด์•ˆ ์šฐ๋ ค

localStorage์™€ sessionStorage๋Š” ๋ณด์•ˆ ์ˆ˜์ค€์ด ๋‚ฎ์•„, ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ํ† ํฐ์ด๋‚˜ ๊ฐœ์ธ ์‹๋ณ„ ์ •๋ณด(PII)๋ฅผ ์•”ํ˜ธํ™” ์—†์ด ์ €์žฅํ•˜๋ฉด ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜, ์•”ํ˜ธํ™” ๊ณผ์ •์„ ๊ฑฐ์ณ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ น, JWT๋Š” HTTPOnly ์ฟ ํ‚ค์— ์ €์žฅํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก ์ ‘๊ทผ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ €์žฅ ์šฉ๋Ÿ‰ ์ œํ•œ๊ณผ ์„ฑ๋Šฅ ๊ณ ๋ ค

๋ธŒ๋ผ์šฐ์ €์˜ localStorage์™€ sessionStorage๋Š” ์•ฝ 5MB ์ •๋„์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ ์šฉ๋Ÿ‰ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์†์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ์ €์žฅํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์‹ ์ค‘ํžˆ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋‚˜ ๋ณต์žกํ•œ ๋Œ€๊ทœ๋ชจ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด, ์ด๋Ÿฌํ•œ ์Šคํ† ๋ฆฌ์ง€๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , IndexedDB์™€ ๊ฐ™์€ ๋Œ€์•ˆ์ ์ธ ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IndexedDB๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ €์žฅ์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋น„๋™๊ธฐ API๋ฅผ ์ œ๊ณตํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ

Zustand persist๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Date ๊ฐ์ฒด, Map, Set ๋“ฑ๊ณผ ๊ฐ™์ด JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ ๋ฐ ๋ณต์› ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด serialize์™€ deserialize ์˜ต์…˜์„ ํ™œ์šฉํ•ด ์ปค์Šคํ…€ ์ง๋ ฌํ™” ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Date ๊ฐ์ฒด๋Š” ISO ํ˜•์‹์˜ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ €์žฅํ•˜๊ณ , ๋ณต์› ์‹œ ๋ฌธ์ž์—ด์„ ๋‹ค์‹œ Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ์ง€์—ฐ๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ

localStorage๋Š” ์—ฌ๋Ÿฌ ํƒญ์—์„œ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋™๊ธฐํ™”๊ฐ€ ์ฆ‰๊ฐ์ ์ด์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ storage ์ด๋ฒคํŠธ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋™๊ธฐํ™”๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” WebSocket์ด๋‚˜ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ๋™๊ธฐํ™”๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

Zustand persist๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ๋ฅผ ํ™œ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์„ค์ •์œผ๋กœ ๋‹ค์–‘ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ ์ ˆํ•œ ๋ณด์•ˆ ์กฐ์น˜์™€ ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Zustand persist๋กœ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ๊ฒฝํ—˜์„ ์„ค๊ณ„ํ•ด ๋ณด์„ธ์š” ๐Ÿป

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 1์›” 17์ผ

์˜คํ˜ธ localstorage์™€ zustand๋Š” ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ ์žˆ์—ˆ๋Š”๋ฐ zustand๋„ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ ์žˆ์—ˆ๊ตฐ์š”! ์ž˜ ์•Œ์•„๊ฐ‘๋‹ˆ๋‹ค

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2025๋…„ 1์›” 20์ผ

ํฌ์ŠคํŒ… ํ•ด์ฃผ์‹œ๋Š” ๊ธ€๋“ค์ด ๋‹ค ์ œ ์ทจ์ €๋„ค์š”. persist ์ž˜ ๋ณด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค : )

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ