Zustand: 간단하고 가벼운 전역 상태 관리 라이브러리
Redux가 너무 무겁게 느껴질 때, 더 간단하고 직관적인 상태 관리 방법이 필요할 때 Zustand가 좋은 대안이 됩니다.
Zustand는 React 앱에서 전역 상태를 관리하기 위한 가벼운 상태 관리 라이브러리입니다. Zustand는 독일어로 "상태(state)"를 의미하며, Redux처럼 중앙 저장소에서 상태를 관리하지만, 보다 직관적이고 코드가 간결하다는 큰 장점을 가지고 있습니다. Redux에서는 Action, Reducer, Store 구성 등으로 인해 초보자에게는 진입 장벽이 높은 반면, Zustand는 하나의 훅(hook)으로 모든 것을 처리할 수 있어 훨씬 접근성이 좋습니다.
또한 Zustand는 React 외부에서도 상태에 접근할 수 있고, SSR(서버 사이드 렌더링) 환경에서도 잘 작동하여 Next.js 등 다양한 프레임워크와도 궁합이 좋습니다. 기본적으로 불변성을 유지하며, 확장성을 위해 Devtools, Persist, Immer 등 다양한 미들웨어도 지원합니다.
import { create } from 'zustand';
const useStore = create((set) => ({
count: 0,
increment: () => set((state) => ({ count: state.count + 1 })),
decrement: () => set((state) => ({ count: state.count - 1 })),
}));
create 함수 안에 상태와 업데이트 로직을 정의합니다.set은 상태를 업데이트할 때 사용합니다.주의: 상태는 객체 형태로 리턴되어야 합니다.
const count = useStore((state) => state.count);
const increment = useStore((state) => state.increment);
<button onClick={increment}>+</button>
주의: useStore를 여러 번 호출해도 내부적으로 하나의 store를 공유합니다.
const useUserStore = create((set) => ({
user: { name: 'Tom', age: 25 },
setName: (name) => set((state) => ({ user: { ...state.user, name } })),
}));
예시:
const name = useUserStore((state) => state.user.name);
const setName = useUserStore((state) => state.setName);
// 컴포넌트 외부에서도 사용 가능
useStore.getState().count;
useStore.setState({ count: 10 });
import { create } from 'zustand';
import { devtools, persist } from 'zustand/middleware';
const useStore = create(
devtools(
persist((set) => ({
count: 0,
increase: () => set((state) => ({ count: state.count + 1 })),
}), { name: 'counter-storage' })
)
);
주의: 미들웨어는 순서에 따라 다르게 동작하므로 공식 문서 참고가 필요합니다.