React/API연동/Lesson 16
React Query로 서버 상태 관리
40분·theory
이 챕터
2/2
TypeScript
React Query로 서버 상태 관리
💡 왜 배워야 할까요?
🎯
서버 데이터 캐싱과 동기화를 자동으로 처리해 코드량을 70% 줄입니다.
💼
백그라운드 재검증으로 항상 최신 데이터를 유지하면서 UX를 개선합니다.
⚡
에러 처리, 재시도, 로딩 상태 관리가 선언적으로 간단해집니다.
🔗
대규모 서비스(당근마켓, 토스 등)에서 필수 기술입니다.
🏢 실무에서는
실무에서는 상품 목록을 불러올 때 React Query가 자동으로 캐싱하고, 사용자가 다른 페이지 갔다 돌아와도 캐시된 데이터를 즉시 보여줍니다. 5분마다 백그라운드에서 자동 새로고침되어 항상 최신 가격을 유지합니다.
개념
React Query는 서버 상태의 캐싱, 동기화, 재검증을 자동화하는 라이브러리입니다. fetch 코드와 로딩/에러 상태 관리의 반복을 획기적으로 줄입니다.
왜 중요한가?
서버 상태 관리의 70%를 React Query가 자동 처리합니다. 캐싱, 백그라운드 재검증, 낙관적 업데이트, 무한 스크롤을 선언적으로 구현할 수 있습니다.
핵심 개념
React Query 핵심 개념
쿼리 상태 머신
주요 설정
캐시 키 설계 원칙
백그라운드 재검증 (stale-while-revalidate)
1. 캐시된 데이터를 즉시 반환 (빠른 응답)
2. 백그라운드에서 새 데이터 페칭
3. 새 데이터 도착 시 UI 업데이트
→ 사용자는 빈 화면 대신 즉시 이전 데이터를 봄
핵심 포인트
- ▸stale-while-revalidate: 캐시 즉시 반환 + 백그라운드 재검증
- ▸쿼리 키: 계층적 설계로 관련 캐시 일괄 무효화
- ▸useMutation + onMutate: 낙관적 업데이트로 UX 향상
- ▸useInfiniteQuery: 무한 스크롤 선언적 구현
💡 ⚠️ 흔한 실수
- ▸queryKey를 문자열 하나로만 사용 — 배열 형태로 계층화해야 관련 캐시 일괄 무효화 가능
- ▸staleTime/cacheTime 미설정 — 기본값으로 매 포커스마다 재요청 발생. 데이터 특성에 맞게 조정
- ▸useMutation 후 invalidateQueries 누락 — 목록에 새 항목이 반영 안 됨. onSuccess에서 관련 쿼리 무효화 필수
- ▸queryFn에서 에러를 잡아서 처리 — throw를 해야 React Query가 에러 상태로 처리. catch 후 throw 필요
💡 🎯 면접 준비
Q: React Query와 Redux의 차이점은?
Q: staleTime과 cacheTime의 차이를 설명하세요
Q: 낙관적 업데이트를 어떻게 구현하나요?
힌트: Redux는 클라이언트 상태 전체를 관리하지만, React Query는 서버 상태에 특화해 캐싱·재검증·동기화를 자동화합니다. staleTime은 데이터를 신선하다고 간주하는 기간(재요청 안 함)이고, cacheTime은 비활성 캐시를 메모리에 유지하는 기간입니다. 낙관적 업데이트는 onMutate에서 setQueryData로 UI를 먼저 변경하고, 에러 시 onError에서 이전 데이터로 롤백, onSettled에서 서버 데이터로 재동기화합니다.
⚛️ React 패턴 — React Query로 서버 상태 관리
React Query로 서버 상태 관리을 React에서 어떻게 쓰는지 코드와 함께 단계별로 익혀보세요.
1
🧩
1. React Query로 서버 상태 관리 사용 시나리오
이 기능이 필요한 상황.
↓
2
💻
2. 코드 작성
React Query로 서버 상태 관리의 기본 사용법.
↓
3
🎨
3. 렌더링 결과
사용자가 보는 화면.
↓
4
💡
4. 실무 팁
흔한 함정과 베스트 프랙티스.
🎮 React Query로 서버 상태 관리 — 단계별 이해
각 단계를 클릭해 내용을 읽고 ✓ 이해했어요 버튼으로 진행률을 확인하세요.
🖥️ 실행 결과 — 렌더링된 React 컴포넌트
✏️ React 코드 수정하기 (클릭해서 열기)
⚛️ React 18 + Babel Standalone — 결과 먼저 확인 후 코드 편집기에서 직접 수정해볼 수 있습니다.
확인 퀴즈
React Query의 핵심 기능이 아닌 것은?
먼저 읽으면 좋은 개념: 데이터 패칭
다음 추천: Zustand — 요즘 1티어 전역 상태