Choorai

프론트엔드 데이터 흐름 기초

로컬 상태에서 API 중심 상태로 전환할 때 필요한 최소 개념과 구현 패턴을 정리합니다.

핵심 구분

  • Local State: UI 내부 상태 (모달 열림, 입력값 등)
  • Server State: API에서 받아오는 데이터
  • Query: 읽기 요청
  • Mutation: 생성/수정/삭제 요청
  • Invalidation: 변경 후 캐시를 무효화하고 재조회

기본 흐름

  1. 페이지 진입 시 Query로 목록 로드
  2. 사용자 액션으로 Mutation 실행
  3. 성공 시 관련 Query 무효화
  4. 재조회된 데이터로 화면 동기화

실전 예시 (React Query)

todos.tsx
const listQuery = useQuery({
  queryKey: ['todos'],
  queryFn: fetchTodos,
});

const createMutation = useMutation({
  mutationFn: createTodo,
  onSuccess: () => queryClient.invalidateQueries({ queryKey: ['todos'] }),
});

로딩/에러 상태 처리

TodosList.tsx
if (listQuery.isLoading) return <p>불러오는 중...</p>;
if (listQuery.isError) return <p>오류: {String(listQuery.error)}</p>;

return (
  <ul>
    {listQuery.data.items.map((todo) => (
      <li key={todo.id}>{todo.title}</li>
    ))}
  </ul>
);

60분 챌린지 연결 지점

초심자 실수 TOP 3

  • Query 결과를 로컬 상태로 또 복사해서 동기화 꼬임
  • Mutation 성공 후 목록 재조회(invalidate) 누락
  • 로딩/에러 상태 처리를 생략해 빈 화면만 보임

검증 체크리스트

  • 네트워크 탭에서 요청이 실제로 나가는지 확인
  • 성공 후 목록 요청이 다시 나가는지 확인
  • 실패 시 사용자에게 에러 메시지가 보이는지 확인

마지막 업데이트: 2026년 2월 22일 · 버전: v0.0.1

피드백 보내기

입력한 내용으로 새 이슈 페이지를 엽니다.

GitHub 이슈로 보내기