- 지금까지 직접 만든 상태 관리 라이브러리에 대해 알아봤으니
이번에는 리액트 생태계에서 많은 개발자들이 사용하고 있는 상태 관리 라이브러리에 대해 알아보고자 한다.
여기서는 비교적 나온지 오래됐고, 널리 사용되고 있으며, 관련 문서와 유스케이스도 다양한 리덕스와 MobX에 대해서는
다루지 않는다.
그 대신 비교적 최근에 나왔고 앞선 두 라이브러리의 대안으로 각광받고 있는 Recoil, Jotai, Zustand에 대해 살펴보고자 한다.
- Recoil과 Jotai는 Context와 Provider, 그리고 훅을 기반으로 가능한 작은 상태를 효율적으로 관리하는 데 초점을 맞추고 있다.
그리고 Zustand는 리덕스와 비슷하게 하나의 큰 스토어를 기반으로 상태를 관리하는 라이브러리다.
Recoil, Jotai와는 다르게 이 하나의 큰 스토어는 Context가 아니라 스토어가 가지는 클로저를 기반으로 생성되며,
이 스토어의 상태가 변경되면 이 상태를 구독하고 있는 컴포넌트에 전파해 리렌더링을 알리는 방식이다.
- 여기서는 실제 세 라이브러리를 어떻게 사용해야 하는지, 또 제공하고 있는 API는 무엇인지 등을 자세히 소개하지 않는다.
그 대신 세 상태 관리 라이브러리가 지향하는 목적은 무엇이고,
라이브러리 내부에서는 어떻게 상태를 관리하며,
나아가 이 상태를 각 컴포넌트로 어떻게 전파해 렌더링을 일으키는지와 같은 핵심적인 요소만 살펴보고자 한다.
세 라이브러리에 대한 자세한 API 및 사용 예제는 각 라이브러리의 홈페이지와 깃허브 저장소를 참고하기 바란다.
1) 페이스북이 만든 상태 관리 라이브러리 Recoil
- Recoil은 리액트를 만든 페이스북에서 만든 리액트를 위한 상태 관리 라이브러리다.
리액트에서 훅의 개념으로 상태 관리를 시작한 최초의 라이브러리 중 하나이며,
최소 상태 개념인 Atom을 처음 리액트 생태계에서 선보이기도 했다.
- 2020년 처음 만들어졌지만, 깃허브 주소에서도 알 수 있는 것처럼 아직 정식으로 출시한 라이브러리가 아니라
실험적으로 개발되고 운영되는 라이브러리다.
비교적 오랜 시간이 흘렀음에도 여전히 실험 단계인 점, 즉 1.0.0이 배포되지 않아 많은 개발자로 하여금
실제 운영되고 있는 서비스에 Recoil 설치를 머뭇거리게 하고 있다.
- Recoil 팀에서는 리액트 18에서 제공되는 동시성 렌더링, 서버 컴포넌트, Streaming SSR 등이 지원되기 전까지는
1.0.0을 릴리스하지 않을 것이라고 밝힌 바 있다.
따라서 Recoil은 실제 프로덕션에 사용하기에는 안정성이나 성능, 사용성 등을 보장할 수 없으며,
유의적 버전에 따라 부(minor) 버전이 변경돼도 호환성이 깨지는 변경 사항이 발생할 수도 있는 위험을 안고 있다.
- 그럼에도 간혹 실제 프로젝트에서 Recoil을 채택해 안정적으로 서비스하고 있다는 이야기도 들려오기 때문에,
Recoil을 실제 프로덕션에 채택할 것인지는 개발자의 선택에 달려 있다.
비록 정식 출시된 라이브러리는 아니지만 Recoil에서 제공하는 개념과 구현 방식은 여타 라이브러리에도
많은 영향을 끼쳤기 때문에 이번 절에서는 가장 먼저 Recoil을 먼저 살펴보고자 한다.
-