리액트 쿼리는 서버상태관리라이브러리이다.
리덕스는 클라이언트의 데이터상태를 전역으로 관리하게 해주는 라이브러리이고,
리액트 쿼리는 클라이어트가 아닌 서버의 상태를 관리하는 라이브러리이다.
리액트 쿼리를 왜 쓰는데?
=> 위의 개념과 비슷하다. 기존에 Redux, Mobx, Recoil과 같은 다양하고 훌륭한 상태 관리 라이브러리들이 있긴 하지만,
클라이언트 쪽의 데이터들을 관리하기에 적합할 순 있어도 서버 쪽의 데이터들을 관리하기에는 적합하지 않은 점들이 있다. 이 점을 해결하기 위해 React-Query가 만들어졌다.
리액트 쿼리 다양한 기능들
- React Query는 별도의 설정 없이 즉시 사용 가능하다
- 캐싱을 효율적으로 관리해준다
- 같은 데이터에 대한 여러번의 요청이 있을 시 중복을 제거한다.
- 백그라운드에서 알아서 오래된 데이터를 업데이트해준다.
- 데이터 업데이트 시 최대한 빨리 반영한다.
- 페이징처리, 지연 로딩 데이터와 같은 성능 최적화해준다
- 서버 쪽 데이터를 가비지 컬렉션을 이용하여 자동으로 메모리를 관리해준다.
- 구조적 공유를 통해 쿼리의 결과를 기억해준다.
이렇게만 봐서는 , 그냥 리액트 쿼리가 마냥 굉장한 라이브러리인 것은 알겠으나 어떻게 사용하는 지 정확히 모르겠다.
음.. 그래서 정확히 이해하고 싶어서 배달의 민족에서 운영하는 우아한테크세미나에서 리액트쿼리를 다루길래 영상을 보았다.
영상이 두시간짜리라 아직 절반밖에 못보았지만, 이때까지 정리한 내용들을 적어본다.
[LIVE] React Query와 상태관리 :: 2월 우아한테크세미나 (절반 정리)
상태관리란?
- 상태를 관리하는 방법에 대한 것 => 프로덕트가 커짐에 따라 어려움도 커짐
- 상태들은 시간에 따라 변화함
- 리액트는 단방향 바인딩이므로 props drilling 이슈도 존재함
- 리덕스나 Mobx와 같은 라이브러리를 활용하여 해결하기도 함.
현업배민개발자가 FE 프로덕트를 보며 가진 고민
- 상태관리 영역이 서버값을 저장하는데까지 확장됨. ( api통신 관련 코드조차 Store에서 관리 )
- 반복되는 isFetching, isError 등 API 관련 상태
- 반복되는 비슷한 구조의 API 통신 코드
서버에서 받아야하는 상태들의 특성
- 데이터의 소유권이 클라이언트가 아닌, 서버에서 관리되고 유지됨.
- 비동기 API가 필요함
- 다른 사람들과 공유되는 데이터이기 때문에, 사용자가 모르는 사이에 변경될 수 있음. (그렇기때문에, 잠재적으로 "out of date"가 될 가능성 지님)
키포인트는? 오너십이 클라이언트에 있냐 서버에 있냐!
클라이언트에서 관리 및 제어를 하는 지, 서버에서 관리 및 제어를 하는 지
배민 주문 프로덕트에서는 해당 컴포넌트마다 직접 키는 것이 아니라, Query를 선언하는 함수들을 도메인별로 묶어서 관리중. (직접 키면 관리가 어렵다고 함.)
'프로젝트 > 보드윗 (보드게임원 매칭 서비스)' 카테고리의 다른 글
[ 항해99 실전프로젝트 ] 아바타샵 포인트 차감 로직 (0) | 2022.12.03 |
---|---|
[ 항해99 실전프로젝트 ] 프로젝트 튜토리얼 만들기 (0) | 2022.12.01 |
[ 항해99 실전프로젝트 ] 외면하지 말기 (0) | 2022.11.29 |
[ 항해99 실전프로젝트 ] 초기 렌더링 개선 (0) | 2022.11.28 |
[ 항해99 실전프로젝트 ] 중간발표 회고록 (0) | 2022.11.26 |