-
Zustand 도입 이유NextJS 2026. 3. 28. 12:20
- 문제 상황 - 게시글의 조회수 중복 증가
- 해결 방법 - Zustand 도입
- 이유 -
게시글 조회수의 중복 증가를 방지하고 싶었다.
그러기 위해서는 새로고침을 해도 값이 유지되어 지속적으로 관리 가능한 상태관리가 필요했다.
localStorage만 쓰지 않은 이유는, localStorage 값이 변경되어도 React 렌더링이 일어나지 않기 때문이다.
렌더링이 없으면 UI와 실제 데이터 간의 동기화가 깨진다.
Zustand는 React 상태로 값을 관리하기 때문에 상태가 변경되면 리렌더링이 발생한다.
여기에 persist 미들웨어를 적용하면, 상태가 변경되는 시점에 localStorage와 자동으로 동기화되어 새로고침 후에도 값이 유지된다.
React Query는 서버 상태관리이고, 본 글 목록은 클라이언트 상태이기 때문에 클라이언트 상태관리 라이브러리인 Zustand를 선택했다. - 결과 - 설정한 시간에 따라 조회수가 중복적으로 증가하지 않게 되었다.
왜 Zustand를 선택했는가?
주요 상태관리 라이브러리 비교:
Redux Recoil Jotai Zustand보일러플레이트 많음 중간 적음 적음 학습 곡선 높음 중간 낮음 낮음 번들 크기 큼 중간 작음 작음 React 의존성 없음 있음 있음 없음 persist 지원 별도 패키지 별도 구현 별도 패키지 내장 미들웨어
각각 어떤 상황에 쓰여:
- Redux — 대규모 팀, 복잡한 비즈니스 로직, 미들웨어 생태계가 중요할 때
- Recoil — React 친화적, atom 단위 세밀한 상태 관리가 필요할 때, 하지만 최근 업데이트가 중단
- Jotai — Recoil과 비슷하지만 더 가볍게
- Zustand — 작고 빠르게, 보일러플레이트 최소화, persist가 필요할 때
신입 포트폴리오 프로젝트 규모에서는 Zustand가 학습 곡선도 낮고, persist 미들웨어가 내장이라요구사항에 맞았다.
'NextJS' 카테고리의 다른 글
[Study-Mate] GitHub Actions 배포 자동화(with. docker) (0) 2026.04.06 [Study-Mate] HTTPS로 전환하기 (0) 2026.04.05 [Study-Mate] 성능 최적화 2. 이미지 최적화 (0) 2026.03.29 로그아웃해도 Header가 로그인 상태로 남는 이유(해결) (0) 2026.03.21 [Study-Mate] 성능 최적화 1. SSR 처리 (0) 2026.03.12