프로젝트에서 React Query를 상태 공유 방식으로 선택한 이유를 정리해보았습니다. 이 포스트는 동일한 목적을 위해 사용할 수 있는 몇 가지 다른 방식들과 함께 비교하고, 실제로 왜 React Query를 선택하게 되었는지를 설명해보려 합니다.
// 📍 목록 페이지
queryClient.setQueryData(['report', report.reportId], report);
// 📍 상세 페이지
const { data: report } = useQuery<AiReport>({
queryKey: ['report', reportId],
queryFn: async () => {
const cached = queryClient.getQueryData<AiReport>(['report', reportId]);
if (!cached) {
router.push('/report');
throw new Error('Report not found');
}
return cached;
},
});
// 📍 목록 페이지
dispatch(setSelectedReport(report));
// 📍 상세 페이지
const report = useSelector((state) => state.report.selectedReport);
// 📍 목록 페이지
sessionStorage.setItem(`report_${report.id}`, JSON.stringify(report));
// 📍 상세 페이지
const report = JSON.parse(sessionStorage.getItem(`report_${reportId}`));
useQuery, queryClient로 API 통합 처리 → 코드 가독성 향상| 비교 항목 | React Query | Redux | SessionStorage |
|---|---|---|---|
| 구현 복잡도 | 중간 | 높음 | 낮음 |
| 타입 안전성 | ✅ 있음 | ✅ 있음 | ❌ 없음 |
| 서버 상태 통합 | ✅ 있음 | ❌ 없음 | ❌ 없음 |
| 페이지 새로고침 대응 | ❌ 기본 불가 | ❌ 기본 불가 | ✅ 가능 |
| 확장성 | ✅ 뛰어남 | ✅ 뛰어남 | ❌ 제한적 |
React Query는 단순한 상태 공유를 넘어서 서버 상태를 구조화하고, 클라이언트에서 일관되게 다룰 수 있는 가장 유연한 도구입니다.