디자인과 서버 개발을 기다리는동안 이것저것 많이 찾아봤다.
그 중 클라이언트와 서버 데이터를 따로 관리하는 recoil과 react query 조합도 있었는데, 지금 만들고 있는 서비스에선 서버 데이터를 그다지 많이 사용하지는 않기 때문에 새로운 기술을 굳이 두개나 도입할 필요가 있을까?싶어 RTK Query를 도입해보기로 결정했다.
Recoil 정리글 바로가기
react-query 정리글 바로가기
RTK Query는 react-query와 비슷한데, 공식문서에 따르면 "Redux Toolkit 패키지에 포함된 선택적인 추가기능"이며 "Redux Toolkit에 있는 다른 API와 같이 제공"된다.
작업중인 프로젝트에서 소켓 통신 관련 데이터를 Redux Toolkit으로 하고 있기 때문에, RTK Query를 사용해보면 좋겠다고 생각했다.
기존에 Redux Toolkit으로 axios 통신을 하려면, 다음과 같은 절차를 거쳐왔다.
1) axios interceptor 파일을 만들어 interceptor를 관리한다.
2) api 파일을 만들어 관련 api들을 관리한다.
3) redux module에서 thunkAPI를 만든다.
4) 컴포넌트에서 thunkAPI를 dispatch 한다.
5) slice에서 extrareducer로 상태 관리를 한다.
6) 데이터가 필요한 곳에서 useSelector를 사용해 데이터를 호출한다.
뭔가 좀 많지 않은가? 이해하고 나면 그렇게 어려운 개념은 아니지만, thunk는 boilerplate 코드도 많고, 이 절차가 복잡하다는 의견이 많다. 그래서 다들 react-query를 쓴다고 한다.
react-query와 비슷한 RTK Query는 통신을 위해 다음과 같은 절차를 거친다.
1) query를 만든다.
2) useQuery로 필요한 데이터를 호출한다.
와우. 이렇게 쓰니까 엄청 간단해보인다 ㄷㄷ
RTK Query에 내장된 속성들을 잘 이용하면 따로 instance를 만들어 인증 요청 시 헤더를 넣어주지 않아도 되고, 에러 핸들링도 미들웨어를 사용해 한번에 할 수 있다. 그리고 에러 처리도 그냥 error 불러와서 쓰면 된다!
그래서 어느 프로젝트에서 썼냐구 ?! 가치마인드 프론트 깃헙 바로가기