Zustand는 React 생태계에서 사용되는 상태 관리 라이브러리 중 하나로, Redux보다 가볍고 직관적인 사용법을 제공하는 것이 특징입니다. 보일러플레이트 코드가 거의 없고, Hook 기반의 API로 React 코드와의 결합이 자연스럽습니다.
useStore 훅을 통해 상태를 구독 및 변경 가능async/await 직접 사용 가능persist, subscribeWithSelector 등의 미들웨어 제공import { create } from 'zustand';
const useStore = create((set) => ({
count: 0,
increase: () => set((state) => ({ count: state.count + 1 })),
decrease: () => set((state) => ({ count: state.count - 1 })),
}));
Redux는 JavaScript 애플리케이션의 전역 상태 관리를 위한 라이브러리로, Flux 아키텍처를 기반으로 합니다. 전통적으로 React에서 많이 사용되며, 다양한 미들웨어와 디버깅 도구를 갖추고 있어 대규모 프로젝트에서 유용합니다.
redux-thunk, redux-saga 등을 통해 비동기 로직 처리import { createStore } from 'redux';
const counterReducer = (state = { count: 0 }, action) => {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 };
case 'DECREMENT':
return { count: state.count - 1 };
default:
return state;
}
};
const store = createStore(counterReducer);
| 비교 항목 | Zustand | Redux |
|---|---|---|
| 설정 및 사용법 | 매우 간단함 | 복잡한 설정 필요 (액션/리듀서) |
| 코드 양 | 짧고 간결함 | 보일러플레이트 많음 |
| 상태 구조화 | 자유로운 구조 | 엄격한 구조 필요 |
| 비동기 처리 | 직접 async/await 사용 | redux-thunk 또는 redux-saga 필요 |
| 성능 | 선택적 구독 가능 → 성능 최적화 | 전체 상태 변경 시 리렌더링 발생 가능 |
| 미들웨어 | 일부 제공 (예: persist) | 다양한 서드파티 미들웨어 존재 |
| 디버깅 툴 | 기본 없음 (추가 설정 필요) | Redux DevTools 기본 지원 |
async/await 기반 비동기 처리 가능| 사용 상황 | Zustand 추천 | Redux 추천 |
|---|---|---|
| 간단한 상태 관리 | ✅ | ❌ |
| 대규모 애플리케이션 | ❌ | ✅ |
| 빠른 개발과 프로토타이핑 | ✅ | ❌ |
| 강력한 디버깅 필요 | ❌ | ✅ |
| 성능 최적화(부분 구독) | ✅ | ❌ |
| 팀 협업 및 일관성 | ❌ | ✅ |
| 초보자 학습용 | ✅ | ❌ |