23.08.23
Redux란, 가장 많이 사용하는 상태 관리를 도와주는 라이브러리입니다.
Redux는 3가지의 기본 원칙이 있는데 첫번째는 애플리케이션의 모든 상태가 하나의 저장소 안에 하나의 객체 트리 구조로 저장되어야 하며, 두번째로는 상태가 읽기 전용이어야 해서 상태를 변화시키는 유일한 방법은 액션 객체를 전달하는 방법뿐이라는 것입니다. 마지막으로 세번째는 Redux의 리듀서는 순수 함수로 작성되어야한다는 것입니다. 물론 상태 값이 적을 때는 로컬에서 상태를 관리해도 충분하기도 하고 단순히 전역 상태 관리만 한다면 React 자체에서 제공해주는 Context API를 사용하는 것만으로도 충분 하지만 프로젝트 규모가 크고 수 많은 컴포넌트 간에 상태 값을 공유하거나 변경해야 한다면 상태를 더욱 체계적으로 관리해야하며 프롭 드릴링을 방지하기 위해 Redux를 사용하는 편이 좋습니다.
즉, Redux를 사용하게 되면 하나의 공간에 state를 모아 두고 데이터를 전역 상태로 분리시켜서 효율적으로 관리할 수 있어서 여러 컴포넌트를 거치지 않고 손쉽게 상태 값을 전달하거나 업데이트할 수 있습니다. 그로 인해 코드의 유지 보수성도 높여 주고 작업 효율도 극대화할 수 있습니다. 추가로 아주 편리한 개발자 도구도 지원하며, 미들웨어라는 기능을 제공하여 비동기 작업을 훨씬 효율적으로 관리할 수 있게 해주기도 합니다. 또한 Redux는 다른 상태 관리 라이브러리에 비해 순수함수를 사용하기 때문에 상태 예측이 가능하고 , 중앙화되고, 디버깅이 쉽고, 유연하다는 장점이 있습니다.
Recoil이란, React에서 상태 관리를 도와주는 라이브러리입니다.
Recoil은 페이스북 사에서 만든 라이브러리입니다.
Recoil의 특징으로는 비동기 처리를 기반으로 작성되어 동시성 모드를 제공하기 때문에, Redux와 같이 다른 비동기 처리 라이브러리에 의존할 필요가 없습니다. atom에서 selector를 거쳐 컴포넌트로 전달되는 하나의 data 플로우를 가지고 있어 복잡하지 않은 상태구조를 갖고 있어 Redux에 비해 보일러 플레이트가 적습니다. 또한 atom과 selector만 알고도 어느정도 구현이 가능하기 때문에 러닝커브(= 신기술을 학습하는데 소요되는 시간)가 비교적 낮다고 할 수 있습니다. 그리고 Context API 기반으로 구현된 함수형 컴포넌트에서만 사용이 가능하여 더 리액트에 가까운 라이브러리라고 할 수 있습니다.
다만, Redux에 비해 최신에 나온 라이브러리이다 보니, 사용자 커뮤니티가 비교적 빈약하여 레퍼런스가 적다는 단점이 있습니다. 또한 시작하기는 쉬우나 상태 관리 자체가 굉장히 세분화되어 있어 처음 시작하는 사람들이 디버깅하거나 테스트를 진행하기엔 어려울 수 있습니다.
+) npm trends에서 본 전역 상태 라이브러리 사용 추세 ... 확실히 redux 사용이 넘사 ...
