사내 프로젝트에 사용할 전역 상태관리 라이브러리를 결정하기 위해 상태 관리 라이브러리를 비교하며 적었던 짧은 문서와 개인적 의견입니다! 결과적으로는 Mobx
를 도입하여 사용하게 되었습니다.
🧑💻 action은 데이터 묶음을 reducer로 보내고 reducer는 store를 갱신한다.Context API가 지금의 형태로 사용방식이 개선되기도 전에, 그리고
useReducer
라는 Hook이 존재하기 전부터 만들어진 라이브러리이다. Context API가 개선되기 전에는 리덕스가 글로벌 상태 관리 용도로 많이 사용되었다.
action
, reducer
, dispatch
combineReducers
등으로 합쳐 주어야 함.🧑💻 store의 observable로 상태를 가지고 action으로 갱신.모든 상태 변화가 일어나는 변화를 자동으로 추적해주는 전역 상태 관리 라이브러리.
observer
를 통해 변경 사항을 자동으로 추적함. 즉, 업데이트가 자동으로 추적되므로 더 쉽게 사용할 수 있음.mobx-react
는 v6 이상부터 decorator
문법을 더 이상 지원하지 않음. 현재 존재하는 레퍼런스들은 데코레이터 문법을 이용하여 작성된 레퍼런스들이 많은데, 이 때문에 레퍼런스를 참조할 시에는 공식 문서와 비교하며 주의 깊게 살펴봐야 할 것 같음. 공식 문서 또한 Class 형식으로 작성되어 있어 공식 문서를 참조할때도 주의가 필요. 🔗facebook에서 만든 상태 관리 라이브러리. context API 기반으로 만들어졌으며 호환성이나 단순함을 위해 React에 내장된 상태 관리 기능을 사용하는 게 바람직하다는 철학을 바탕으로 만들어짐.
- 비동기 처리를 기반으로 작성되어 Redux처럼 다른 비동기 처리 라이브러리에 의존할 필요가 없음.
- atom - selector 를 거쳐 컴포넌트로 전달되는 하나의 data-flow를 가지고 있어, 복잡하지 않은 상태 구조를 가지고 있음.
useState
,useEffect
와 유사한 hook(React 친화적 문법)으로 러닝 커브가 낮고 쉽게 사용할 수 있다.- 디버깅 툴의 불완전성, 개발된지 오래되지 않은 라이브러리이기 때문에 공식 문서에 있는 몇몇 기능도 불안정한(UNSTABLE) 경우가 있다. (API가 실험적, Github 리포지토리 자체도 facebook/Recoil이 아니고 facebookexperimental/Recoil이다.)
react-redux
7 이상부터는 useSelector
, useDispatch
등의 hook으로 인해 전보다 보일러플레이트가 줄어들고 간편하게 사용할 수 있게 되었으나, 여전히 switch문을 사용하여 작성하는 reducer
나 불변성 유지, 비동기 처리를 위해 사용하는 라이브러리 등으로 인해 여전히 러닝커브가 높다고 생각됩니다.
Mobx가 레퍼런스가 Redux보다 적으며 참고 시에도 주의 깊게 살펴보아야 한다는 단점이 있지만, 그럼에도 불구하고 Redux에 비해 간략한 개념과 적은 코드, 비동기 처리의 간편성으로 초기에 쉽고 빠르게 사용이 가능할 것 같습니다.
Recoil은 개인적으로 사이드 프로젝트에서 만족스럽게 사용하고 있는 라이브러리지만, 실무에 도입하기에는 아직 실험적이고 불안정한 부분이 많다고 판단됩니다.
대형 프로젝트에서 Redux를 사용하느냐, Mobx를 사용해야 하느냐는 사용자마다 의견이 갈렸습니다. 두 라이브러리 모두 훌륭한 라이브러리지만, ‘다양한 상태 관리 라이브러리들이 등장하고 있는 현 상황에서 굳이 Redux만을 고집할 필요가 없다’ 라는 의견이 등장하는 추세고 개인적으로도 이 의견에 동의하고 있습니다. 👶