0Pricing
React Academy · 강의

Persist 미들웨어로 상태 유지하기

persist 미들웨어를 사용해 Zustand 상태를 localStorage 또는 sessionStorage와 동기화합니다.

Persist 미들웨어로 상태 유지하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 레슨에서는 Zustand의 persist 미들웨어를 사용하여 store 상태를 localStorage와 자동으로 동기화하고 페이지를 새로 고쳐도 상태가 유지되도록 합니다.

상태를 저장해야 하는 이유

상태 저장을 사용하지 않으면 사용자가 페이지를 새로 고칠 때 모든 store 상태가 초기화됩니다. 장바구니 항목, 사용자 환경 설정 또는 UI 상태(열린 패널)와 같은 store를 localStorage에 저장하면 세션이 바뀌어도 원활한 사용 환경을 제공할 수 있습니다.

persist 미들웨어

create() 호출을 persist()로 감쌉니다. 고유한 저장소 키를 제공합니다. Zustand는 마운트될 때 localStorage에서 자동으로 읽고 모든 상태 변경 시 기록합니다.
import { create } from 'zustand';
import { persist } from 'zustand/middleware';

const useCartStore = create(
  persist(
    (set) => ({
      items: [],
      addItem: (item) => set(s => ({ items: [...s.items, item] })),
    }),
    { name: 'cart-storage' } // localStorage key
  )
);

partialize를 사용한 부분 저장

`partialize`를 사용하여 store의 특정 상태 조각만 저장합니다. 이렇게 하면 일시적인 데이터(예: 로딩 플래그)가 localStorage에 저장되지 않습니다.
persist(
  (set) => ({ user: null, token: null, loading: false, fetch: () => {} }),
  {
    name: 'auth-storage',
    partialize: (state) => ({ user: state.user, token: state.token }),
    // loading and fetch are NOT persisted
  }
)

sessionStorage 사용하기

브라우저 세션 동안에만 저장하려면(탭을 닫을 때 삭제됨) 저장소 옵션으로 `createJSONStorage(() => sessionStorage)`를 전달합니다.
import { createJSONStorage } from 'zustand/middleware';

persist(storeCreator, {
  name: 'session-data',
  storage: createJSONStorage(() => sessionStorage),
})

버전 관리 및 마이그레이션

store 구조가 변경될 때(새 필드 추가 또는 키 이름 변경) `version` 번호를 설정하고 기존에 저장된 데이터를 업데이트할 `migrate` 함수를 제공합니다.
persist(storeCreator, {
  name: 'my-store',
  version: 2,
  migrate: (persistedState, version) => {
    if (version === 1) {
      return { ...persistedState, newField: 'default' };
    }
    return persistedState;
  },
})

하이드레이션 및 SSR

서버(Next.js)에는 localStorage가 존재하지 않습니다. Zustand의 persist 미들웨어는 이를 원활하게 처리하여 서버에서는 하이드레이션을 건너뛰고 마운트 후 클라이언트에서 다시 하이드레이션합니다.

onRehydrateStorage 콜백

store가 저장소에서 복원될 때 코드를 실행하려면 `onRehydrateStorage`를 사용합니다. 토큰을 복원한 후 API 호출을 실행할 때 유용합니다.
persist(storeCreator, {
  name: 'auth',
  onRehydrateStorage: () => (state) => {
    if (state?.token) state.fetchUser();
  },
})

저장된 상태 삭제

`useMyStore.persist.clearStorage()`를 호출하여 localStorage에서 저장된 데이터를 제거합니다. 로그아웃 흐름에서 유용합니다.
const handleLogout = () => {
  useAuthStore.persist.clearStorage();
  useAuthStore.setState({ user: null, token: null });
};

저장소 크기 제한

localStorage에는 출처별로 5–10 MB의 제한이 있습니다. 대용량 데이터 세트(예: 전체 상품 카탈로그)는 저장하지 않습니다. 식별자나 작은 구성 객체만 저장합니다.

간단한 확인

persist 미들웨어에서 특정 상태 필드를 localStorage에 저장하지 않도록 제외하는 옵션은 무엇인가요?

복습

Zustand store를 persist()로 감싸고 이름 키를 제공합니다. 관련 있는 상태 조각만 저장하려면 partialize를 사용합니다. store 구조가 변경되면 버전을 지정하고 마이그레이션합니다. 로그아웃할 때 clearStorage()를 사용합니다.

다음 학습 내용

다음 레슨: **Zustand DevTools 및 store 테스트** — Redux DevTools에 연결하고 Zustand 동작에 대한 단위 테스트를 작성합니다.

자주 묻는 질문

“Persist 미들웨어로 상태 유지하기” 강의는 무료인가요?

네 — “Persist 미들웨어로 상태 유지하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Persist 미들웨어로 상태 유지하기”에서 뭘 배우나요?

persist 미들웨어를 사용해 Zustand 상태를 localStorage 또는 sessionStorage와 동기화합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Persist 미들웨어로 상태 유지하기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 첫 Zustand 스토어 만들기
  2. 선택기와 불필요한 다시 렌더링 방지
  3. Persist 미들웨어로 상태 유지하기
  4. Zustand DevTools와 스토어 테스트
← React Academy(으)로 돌아가기