Closed hyeyoonS closed 4 months ago
(사실 Jotai를 프로젝트에서 제대로 활용하지 못했으나, 일반적으로 Jotai를 사용하는 이유와 useContext, useState만으로 관리하는 것에 대비하여 장점을 정리하겠습니다)
Jotai는 전역 상태 관리를 atom 기반으로 간편하게 관리하기 위한 라이브러리이다. useContext나 useState만으로 상태를 관리하는 것보다 아래와 같은 상대적 장점을 얻을 수 있다.
1. 간편하고 유연한 전역 상태 관리 매우 간단하게 전역 상태 관리가 가능하다. useState와 유사한 api를 제공하지만, atom 단위로 쉽게 정의하고 사용할 수 있어서 코드의 복잡성을 줄이고, 상태 관리를 보다 직관적으로 할 수 있다. atom 단위로 쪼개어 관리하기 때문에 각각의 상태를 독립적으로 관리할 수 있고, atom 간의 의존성도 쉽게 설정할 수 있다.
2. 재렌더링 최적화 useContext를 사용하면 Context의 값이 변경될 때 해당 Context를 사용하는 모든 컴포넌트가 재렌더링된다. 하지만 Jotai는 상태가 변경될 때 관련된 atom을 사용하는 컴포넌트만 재렌더링하기 때문에 불필요한 재렌더링을 줄여 성능을 향상시킬 수 있다.
3. Suspense 지원 Jotai는 리액트 Suspense를 기본적으로 지원한다. Suspense를 사용해 비동기 작업을 처리하는 것이 매우 간단하고, 비동기 상태 관리에 강력한 기능을 제공한다.
Q. 전역 상태 라이브러리로 zustand를 선택한 이유 1. 러닝커브와 코드 간결성 리스티웨이브는 6주안에 구현을 마쳐야했고 애자일하게 진행된 프로젝트. 공부와 개발을 병행하며 마감에 맞추기 위해 전역상태관리 라이브러리로 보일러플레이트 20줄정도를 이해하면 응용이 가능할 정도로 러닝커브가 낮은 zustand 선택. 보일러플레이트 양과 복잡도 부분에서 장점을 가진다.
2. 기술 트렌드와 커뮤니티와 생태계 고려 zustand는 대안인 mobx, recoil, jotai에 비해 빠르게 성장중이다. 앞으로의 전역관리의 중심이 될 라이브러리를 공부하고 경험하고싶었다.
Q. useContext나 useState등으로 대체 가능하지 않나요?
zustand는 두가지 부분에서 context API가 대체하기 어려운 장점을 가진다.
Context API의 사용 방식, useContext나 useState 를 사용하지 않은 이유
리액트 16.3부터 도입된 context api를 사용하면 네이티브 리액트만으로 전역 상태관리가 가능합니다. React.createContext 메서드를 통해 Context를 만들고 useState를 이용해서 Provider hell
을 야기할 수 있습니다.
전역 상태 라이브러리 선택 이유 : Jotai
처음에는 Recoil을 염두에 두고 학습을 진행했습니다. React를 만든 기업에서 만든 React를 위한 라이브러리이기에 React와 호환성이 좋고 유지보수도 편리할 것이라고 판단했기 때문입니다. 따라서 Recoil에 대한 자료를 찾아보며 학습을 진행했는데, 학습을 마치고 프로젝트에 적용을 할 무 Recoil에 메모리 누수 문제가 있다는 것을 알게 되었고, Recoil과 거의 유사한 방식인 Jotai를 사용하게 되었습니다.
Jotai에 관한 설명
React의 state와 비슷하게 컴포넌트 트리 안에 상태들이 존재 하며 이들이 상향식(bottom-up)으로 수집 및 공유됩니다. 상태들은 atom이라고 불리는 객체에서 설정 하며, 값의 참조와 조작은 React.useState
와 유사하게 [state, setState]
튜플로 수행합니다.
📎 질문
전역 상태 라이브러리 선택 이유를 알려주세요. useContext나 useState등으로 대체 가능하지 않나요?
MyPetLog
✏ 구술 답변 키워드
✏ 서술 답변
Jotai는 React 애플리케이션에서 전역 상태 관리를 간단하고 직관적으로 할 수 있게 해주는 상태 관리 라이브러리입니다. Jotai를 선택한 이유와 useContext나 useState로 대체할 수 없는 이유를 설명드리겠습니다.
Jotai를 선택한 이유
처음에는 Recoil을 염두에 두고 학습을 진행했습니다. React를 만든 기업에서 만든 React를 위한 라이브러리이기에 React와 호환성이 좋고 유지보수도 편리할 것이라고 판단했기 때문입니다. 따라서 Recoil에 대한 자료를 찾아보며 학습을 진행했는데, 학습을 마치고 프로젝트에 적용을 할 무 Recoil에 메모리 누수 문제가 있다는 것을 알게 되었고, Recoil과 거의 유사한 방식인 Jotai를 사용하게 되었습니다.
Jatai의 장점
단순하고 직관적인 API: Jotai는 매우 간단한 API를 제공합니다. Atom을 정의하고, 이를 사용하여 상태를 읽고 쓸 수 있습니다. 코드가 간결하고 직관적이어서 학습 면에서 좋습니다. 컴포넌트별 상태 분리: Jotai는 각 Atom이 독립적으로 작동하여, 상태 변경 시 필요한 컴포넌트만 리렌더링됩니다. 이는 성능 최적화에 유리합니다. 비동기 상태 관리: Jotai는 비동기 상태 관리도 간편하게 처리할 수 있습니다. 비동기 데이터 페칭을 Atom 내부에서 처리할 수 있어, 비동기 로직을 쉽게 관리할 수 있습니다. 리코일과 유사한 접근 방식: Jotai는 리코일(Recoil)과 유사한 접근 방식을 취하면서도 더 가볍고 간단한 API를 제공합니다. 이를 통해 전역 상태 관리를 쉽게 구현할 수 있습니다. 작은 번들 크기: Jotai는 번들 크기가 작아 애플리케이션의 성능에 큰 영향을 미치지 않습니다.
useContext와 useState로 대체할 수 없는 이유
useContext와 useState를 사용하여 상태를 전역으로 공유하려면, 컨텍스트 프로바이더를 정의하고 이를 애플리케이션 트리에서 적절히 배치해야 합니다. 이는 복잡성을 증가시키고, 코드 관리가 어려워집니다.
컨텍스트의 값이 변경되면 해당 컨텍스트를 구독하는 모든 컴포넌트가 리렌더링됩니다. 이는 성능에 부정적인 영향을 미칠 수 있습니다. Jotai는 필요한 부분만 리렌더링하여 이러한 문제를 해결합니다.
useState와 useContext로 비동기 로직을 처리하려면, 상태 업데이트와 비동기 함수를 관리하는 추가적인 코드가 필요합니다. Jotai는 비동기 상태 관리를 내장하고 있어 이를 간단하게 처리할 수 있습니다.
또한 useState로는 2 depth 이상의 전역 상태를 관리 하기에 적절하지 않습니다. prop driling이라는 한계가 있기 때문입니다.
ListyWave
✏ 구술 답변 키워드
✏ 서술 답변
ListyWave 팀 사용한 전역상태관리 라이브러리
Zustand를 선택한 이유
Context API를 사용하지 않은 이유