본문 바로가기
framework_library/react

그럼 Zustand는 왜 덜 위험한가

by 죄니안죄니 2026. 1. 10.
ZustandZustand
 
 
 

그럼 Zustand는 왜 덜 위험한가

Context가 무너지는 지점을 정확히 피해 간 구조

앞 글에서 결론은 이거였다.

Context는 전달 도구이지
상태 관리 도구가 아니다.

그럼 자연스럽게 다음 질문이 생긴다.

“비슷하게 전역으로 쓰이는데
왜 Zustand는 덜 위험하다고 느껴질까?”

이건 감정 문제가 아니다.
구조 차이다.


1️⃣ Zustand의 출발점은 React가 아니다

이 한 문장이 핵심이다.

Zustand의 상태는
React 컴포넌트 트리 ‘밖’에 있다

 
const useStore = create(set => ({
  count: 0,
  increase: () => set(s => ({ count: s.count + 1 })),
}));

여기서 중요한 점:

  • 이 store는 컴포넌트가 아니다
  • Provider도 아니다
  • 생명주기가 React와 분리돼 있다

👉 Context처럼 “부모가 바뀌면 흔들리는 구조”가 아니다


2️⃣ Context vs Zustand의 가장 큰 차이: 구독 방식

Context의 구독 모델

Provider value 변경
→ 모든 Consumer 렌더 후보

선택권이 없다.


Zustand의 구독 모델

const count = useStore(state => state.count);

이 한 줄의 의미는 이거다.

“store 전체 말고
이 조각만 보고 싶다”

  • count가 바뀔 때만 렌더
  • 다른 상태 변경에는 반응 ❌

👉 부분 구독(selective subscription)

이 차이 하나로
렌더링 폭발 가능성이 급격히 줄어든다.


3️⃣ “상태 변경 위치가 보인다”는 감각

Context를 쓰다 보면 이런 느낌이 든다.

“이 값… 어디서 바뀌지?”

Zustand는 다르다.

increase: () => set(s => ({ count: s.count + 1 }))

상태 변경은:

  • store 안에 모여 있고
  • 함수 이름으로 의도가 드러나고
  • 로직이 한 군데 있다

👉 상태 변경의 ‘주소’가 명확하다

Reduxほど 강제적이지 않지만
Context보다는 훨씬 추적 가능하다.


4️⃣ 생명주기가 꼬이지 않는다

Context 상태의 전형적인 문제:

  • 페이지를 벗어나도 상태가 남음
  • 언제 초기화할지 애매함

Zustand는 이걸 의식적으로 선택하게 만든다.

reset: () => set({ count: 0 })
  • 언제 초기화할지
  • 누가 초기화할지

👉 명시적으로 결정하게 만든다

이게 중요하다.
암묵적인 전역보다
명시적인 전역이 덜 위험하다.


5️⃣ 그래서 Zustand가 “전역처럼 써도 덜 무너진다”

정리하면 Zustand가 안전한 이유는 이거다.

  1. React 트리 밖에 있다
  2. 부분 구독이 기본이다
  3. 상태 변경 로직이 모인다
  4. 생명주기를 명시한다
  5. 규칙은 최소지만 구조는 있다

Context는:

  • 편하지만
  • 통제 장치가 없다

Zustand는:

  • 자유롭지만
  • 최소한의 안전벨트가 있다

6️⃣ 그렇다고 Zustand가 만능은 아니다

여기서도 선은 있다.

❌ Zustand가 위험해지는 순간

  • store가 비대해질 때
  • UI 상태 + 비즈니스 상태가 섞일 때
  • “여기서도 쓰네?”가 반복될 때
  • 규칙 없이 setter가 난무할 때

이때는 Zustand도
Context처럼 전역 쓰레기장이 된다.


7️⃣ 그래서 실무에서 쓰는 기준은 이렇다

이 질문을 던져라.

“이 상태는
여러 페이지에서 필요하고
UI와 밀접하며
변경 규칙이 단순한가?”

  • Yes → Zustand
  • 변경 규칙이 복잡 → Redux 고려
  • 전달만 필요 → Context
  • 화면 한정 → 로컬 / 페이지 상태

8️⃣ 한 문장으로 끝내자

이 글의 결론은 이거다.

Zustand는
‘전역 상태’를 허용하면서도
React의 렌더링 지뢰를 피하도록 설계된 도구다

그래서:

  • Context보다 안전하고
  • Redux보다 가볍고
  • UI 중심 앱에 잘 맞는다

다음 글에서는 마지막 퍼즐 조각으로 간다.

👉 다음 글

“Redux는 왜 아직도 쓰이는가”

  • Redux가 필요한 진짜 상황
  • 왜 과설계처럼 보여도 의미가 있는지
  • “상태 흐름”이 제품 경쟁력이 되는 순간

여기까지 왔으면
이제 전역 상태 도구를
감으로 고르는 단계는 끝났다.

'framework_library > react' 카테고리의 다른 글

React 소스 적용  (0) 2026.01.10
Redux는 왜 아직도 쓰이는가  (0) 2026.01.10
Context는 왜 상태 관리 도구가 아닌가  (0) 2026.01.10
Context / Zustand / Redux  (0) 2026.01.10
전역 상태는 왜 마지막 카드인가  (0) 2026.01.10

댓글