alpaka206

왜 Recoil을 떠나 Zustan‍d를 선택했는가?

date
Jun 29, 2025
slug
from-recoil-to-zustand
author
status
Public
tags
React
펑타이그레이터차이나
summary
Recoil은 React 친화적인 상태 관리 라이브러리지만, 프로젝트가 커질수록 구조화의 어려움과 React 외부 상태 접근의 제약이 분명해졌습니다. 이 글에서는 Recoil을 사용하던 개발자가 Zustand로 옮겨간 배경과, Zustand를 선택한 결정적 이유들을 설명합니다.
type
Post
thumbnail
category
💻 Frontend
updatedAt
Jan 4, 2026 08:58 AM

Recoil에서 느낀 장점과 한계

Recoil은 atom과 selector 기반의 단순하고 강력한 구조 덕분에 처음 배우고 사용하기는 매우 쉬웠습니다. 상태 간의 의존성과 파생 상태를 선언적으로 정의할 수 있었고, Suspense와도 잘 연동되었습니다.
그러나 프로젝트가 커지고 상태가 많아질수록 다음과 같은 문제들이 생기기 시작했습니다:
  • 상태가 너무 분산되어 있어 전체 흐름을 파악하기 어려웠습니다.
  • 여러 atom들이 얽혀 있는 구조에서 디버깅과 추적이 힘들었습니다.
결정적으로 Recoil의 지원이 중단되면서 새로운 상태 관리 라이브러리를 찾아야했습니다.

⚖️ 대안 탐색: Jotai vs Zustand

이 과정에서 Jotai와 Zustand를 비교하게 되었습니다.
항목
Zustand
Jotai
철학
중앙 집중 (Flux)
분산형 (Atomic)
상태 구조
단일 스토어 기반
atom 기반 개별 상태
리렌더링 제어
선택자 기반 최적화
atom 단위 구독
React 외부 사용
가능 (store 자체 사용)
불가능 (기본은 내부 atom)
코드 구조
store 모듈 분리 용이
atom이 많아질수록 복잡해짐
사용 사례
전역 상태, 비동기, WebSocket 등
컴포넌트 단위 상태, 계산된 값
Jotai는 Recoil과 비슷한 구조를 가져서 쉽게 적응할 수 있었지만,
Zustand는 다음과 같은 장점들로 인해 “이건 내가 원하던 상태 관리다”라는 확신을 주었습니다.

내가 Zustand를 선택한 이유

1. React 밖에서도 상태 사용 가능

Zustand의 상태는 React 훅 내부가 아니라 바깥에서 관리됩니다. 이 말은 곧, React 컴포넌트가 아닌 서비스 모듈이나 유틸 함수 등에서도 상태에 접근하거나 수정할 수 있다는 의미입니다.
import { useMyStore } from './store' // React 컴포넌트 외부에서도 접근 가능 const currentUser = useMyStore.getState().user

2. 모듈화된 상태 관리 (Slice Pattern)

상태가 많아져도 Slice 패턴으로 스토어를 기능 단위로 나눌 수 있습니다.
export const useStore = create((...a) => ({ ...createUserSlice(...a), ...createCartSlice(...a), }))
  • 기능 단위로 상태와 로직을 분리하고, 유지보수가 편해졌습니다.
  • 이 구조는 Redux Toolkit의 slice와도 비슷하지만, 보일러플레이트 없이도 가능하다는 것이 매력입니다.

3. 비동기 처리와 외부 요청을 스토어에서 직접 관리 가능

Zustand는 axios, WebSocket, setTimeout 등의 로직을 store에 자유롭게 정의할 수 있습니다.
fetchUser: async () => { const res = await axios.get("/user") set({ user: res.data }) }

4. 불필요한 리렌더링 최소화

Zustand는 selector 기반 구독 최적화 덕분에, 상태 변경 시 관련 컴포넌트만 리렌더링되도록 설정할 수 있습니다.
const userName = useStore((state) => state.user.name)
  • 이 selector 방식은 Jotai보다 리렌더링을 더 직관적이고 명시적으로 컨트롤할 수 있습니다.

결론

Recoil은 React 친화적이고 좋은 상태 관리 도구였지만, 복잡한 상태 구조와 전역 사용성에 한계를 느꼈고,
Zustand는 그 간결함, 유연함, store 설계의 자유로움 덕분에 차세대 상태 관리 도구로 손색이 없었습니다.