Recoil
은 React
에서의 상태 관리 라이브러리 중 하나이다.
전역 상태 관리를 위한 다양한 라이브러리(React-redux
, MobX
, zustand
)를 사용하는데, 그 중 하나이다.
Atomic
. 즉, 원자성을 가진 상태관리 라이브러리로서 비교적 가벼운 러닝 커브와 사용성이 장점이다.
공식문서에서 Recoil
은 "가장 React
스러운" 이라는 점을 강조하고 있다.
React
를 만든 Facebook
에서 만든 것이라는 데에 그 연결성을 갖고 있고,
React
의 주요 철학인 선언적 UI, Component-based 설계, Hooks 사용 방식을 기반으로 한다.
React
에서 상태 관리는 UI의 업데이트를 가져오는 데이터를 의미한다.
rerender
될 것인지를 효율적으로 관리하는 것.RecoilRoot
Recoil
상태를 정의 및 사용할 수 있게 하는 기본 베이스이다.Atom
Recoil
에서의 가장 기본적인 상태 단위(데이터)useRecoilState
훅을 통해 읽고 쓸 수 있다.atom
을 구독하는 컴포넌트는 변경이 일어날 경우, 해당 컴포넌트만 리렌더링한다.Selector
Atom
상태를 기반으로 파생된 데이터를 만들어내는 함수.useRecoilValue
등을 통해 Selector
를 구독하며,useRecoilState
const [value, setValue] = useRecoilState(value);
useRecoilValue
const value = useRecoilValue(value);
useSetRecoilState
const value = useSetRecoilState(value);
Selector
에 대한 setter 함수useRecoilValueLoadable
const data = useRecoilValueLoadable(dataQuery);
if(data.state === 'loading') return ...
if(data.state === 'hasError') return ...
return <CallComponent val={data} />
Selector
에 대해 결과를 핸들링할 때 사용1. 손쉬운 전역 상태 관리
Recoil
의 상태 구독 및 업데이트는 Redux
에 비해 간단하고 안정적Atom
은 모든 컴포넌트에서 접근 가능한 그래프의 노드2. 단방향 데이터 흐름
Redux
와 마찬가지로, Flux패턴에 기반한 단방향 데이터 흐름을 갖는다.React
및 Redux
사용자들에게는 쉽게 접근 가능한 방인이 되는 것.3. 간단한 API, 적은 보일러플레이트
Redux
에 비해 Action
, Reducer
, Middleware
등의 기초 설정 단계가 없어 직관적이고 간단한 전역 상태 구성 가능4. Props Drilling 해결
props
를 전달하며 발생하는 단점인 props drilling
을 해결할 수 있다.2024년 기준, 전역 상태 관리 라이브러리로 Recoil
을 사용하는 개발자들이 점점 더 이탈하고 있다.
이는 당연히 커뮤니티의 약화로 이어진다.
이유로는 새로운 버전의 릴리즈 주기가 느리고, 메모리 누수가 발생한다는 점이 있다.
또한 공식 문서에서 SSR
을 지원한다는 점이 없어 SSR
환경에선
사용하기 어려운 라이브러리로 인식이 잡혀가고 있다.
React
의 경우, 최근 RSC
. 즉, 리액트-서버-컴포넌트
를 지원하는 만큼 SSR
및 서버 자원의 효과적인 사용을 지향하는데,
Recoil
은 이런 점에서 아쉬움이 발생할 수 밖에 없는 것.
여전히 소규모, 가벼운 목적의 프론트엔드에선 Recoil
의 장점이 있다고 생각한다.
오히려 Redux
의 높은 러닝 커브를 마주하기 전에 Recoil
을 하나의 학습 도구로서 활용하는 것 또한 매우 찬성하는 바이다.
그러나, 당연하게도 모든 프로젝트에서 목적과 성격에 맞는 기술 스택을 도입하는 것이 적절하기 때문에
어떤 상태관리 라이브러리를 적용할 것인지에 대해 깊게 생각해봐야한다.
[참고자료]