072DATA

리액트 상태 관리 라이브러리 비교 Context API, Redux, Zustand 본문

FrontEnd/React

리액트 상태 관리 라이브러리 비교 Context API, Redux, Zustand

0720 2024. 9. 19. 23:24

 

공부하다보니 상태 관리 라이브러리에 대해서 정리하면 도움이 될 것 같아서 정리해보려고 한다

 

 

상태 관리의 필요성

리액트에서는 컴포넌트의 상태를 props와 state를 통해 관리하는데

다음과 같은 상황에서는 효율적인 상태 관리가 어렵다.

  • 여러 컴포넌트가 동일한 상태를 공유해야 하거나 상태 구조가 복잡해질 때.
  • 컴포넌트 트리 구조에서 상태를 여러 단계에 걸쳐 전달해야 할 때 (prop drilling이라고 함).
  • 로그인 정보나 테마 설정 등 전역에서 사용되는 상태를 관리할 때.

이러한 문제를 해결하기 위해 상태 관리 라이브러리를 사용함

각 라이브러리마다 특징과 장단점을 가지고 있고

프로젝트에 알맞은 도구를 선택하는 것이 중요하다고 생각한다

 

Context API

 

Context API는 리액트에 내장된 상태 관리 기능인데 컴포넌트 트리를 통해서 전역 상태를 공유할 수 있다

createContext와 useContext를 사용하여 상태를 생성하고 Provider 컴포넌트를 통해서 하위 컴포넌트로 전달한다

장점

  • 리액트 자체 기능이므로 별도의 설치가 필요 없음
  • 간단한 상태 공유와 전역 상태 관리에 적합
  • 상태가 많이 변하지 않는 경우 불필요한 리렌더링이 적음

단점

  • Provider의 값이 바뀌면 해당 Provider를 사용(구독?)하는 모든 하위 컴포넌트가 리렌더링됨
  • 상태가 복잡해지거나 트리가 깊어질수록 관리가 어려워질 수 있음

 

Redux

 

Redux는 프로젝트의 전역 상태를 하나의 중앙 저장소에 관리하여 action과 reducer를 통해서 상태를 갱신함

상태 관리가 필요한 큰 규모의 프로젝트에서 유용하게 사용이 가능함

 

장점

  • 전역 상태를 하나의 스토어에서 관리해 상태를 추적하기 편함
  • Redux의 구조는 액션과 리듀서를 모듈화하여 상태를 체계적으로 관리할 수 있음 복잡한 플젝트의 상태를 잘 조직할 수 있게 해줌

단점

  • 설정과 초기 설정이 다소 복잡할 수 있음(귀찮음..)
  • Action, Reducer, Store 설정 등 반복적인 코드가 많이 필요함

 

Zustand 

 

zustand는 가벼운 라이브러리이며 Redux와 Context APi의 장점을 합쳐 사용자에게 알맞은 APi 제공함

사용법도 간단하여 효율적인 상태 관리를 빠르게 설정할 수 이씀

 

 

장점

  • Redux에 비해 훨씬 간결하고 직관적인 설정이 가능
  • 전역 상태와 비동기 상태를 쉽게 관리할 수 있음.
  • 상태를 구독하고 업데이트하는 데 필요한 코드를 훅 기반으로 제공하여 가독성이 좋음

단점

  • 상태가 복잡해지면 의존성 관리가 까다로울 수 있다고 함

 

 

 

한줄로\ 정리하자면 각 라이브러리를 선택할 때 아래 사항을 고려하면 될듯 

 

 

Context API는 비교적 단순한 전역 상태 관리에 적합

 

Redux는 강력한 관리 기능과 디버깅 도구를 제공하기 때문에 복잡한 상태와 큰 규모에서 사용이 적합

 

Zustand는 간단한 전역 상태 관리와 비동기 상태 관리에 최적화되었고 매번 반복해야하는 코드가 적음 -> 뭐든 무난