Fetch Lifecycle

fetch cleanup 수명 주기

React의 데이터 요청은 로딩 상태만이 아니라 의존성 변경, 요청 취소, 늦게 도착한 응답, 언마운트 cleanup을 함께 다뤄야 합니다.

01

의존성 결정

userId, filter, page처럼 요청을 바꾸는 값을 effect 의존성로 명확히 둡니다.

deps
02

요청 시작

AbortController를 만들고 loading, error, data 상태 전환을 시작합니다.

start
03

응답 검증

응답이 현재 의존성에 해당하는지 확인해 오래된 응답이 최신 상태를 덮지 않게 합니다.

stale guard
04

취소 처리

의존성이 바뀌거나 컴포넌트가 언마운트되면 이전 요청을 abort합니다.

cleanup
05

오류 분리

취소, 네트워크 실패, 서버 오류, 검증 오류를 다른 UI 상태로 구분합니다.

error model
Race
응답 순서 뒤바뀜 늦게 끝난 이전 요청이 최신 화면을 덮지 않도록 request id나 abort를 씁니다.
검색 UI 흔함
Unmount
사라진 컴포넌트 상태 업데이트 cleanup에서 요청을 취소하거나 상태 반영 전 mounted 여부를 확인합니다.
경고 예방
Retry
일시 실패 복구 네트워크 오류와 4xx 검증 오류를 구분해 재시도 여부를 결정합니다.
중복 요청 한계

요청 상태 설계 기준

단일 진실 loading, error, data가 서로 모순되는 조합으로 남지 않게 reducer를 고려합니다.
취소 가능성 사용자가 빠르게 입력하거나 이동해도 이전 요청이 화면을 망치지 않아야 합니다.
빈 상태 성공했지만 결과가 없는 상태와 실패 상태를 분리해 렌더링합니다.