웹 개발
로딩 상태가 멈춰있을 때 안전하게 고치는 방법
React에서 로딩 상태 버그는 UI의 반응성이 떨어져 보인다. 원인을 빠르게 찾는 확인 순서를 정리했다.
로딩이 끝나지 않는 세 가지 원인
사용자 입장에서는 "로딩이 끝나지 않는다"고 보이지만 실제로는 다음 중 하나다:
- API 응답이 오지 않음
- 응답은 왔는데 로딩 상태 플래그를 false로 설정하지 않음
- 응답 후 리렌더링이 안 됨
가장 흔한 실수는 두 번째다. 개발자가 로딩 상태를 on으로는 설정하지만 다양한 시나리오(성공, 실패, 타임아웃)에서 off를 빠뜨린다.
브라우저 개발자 도구로 직접 확인
리액트 개발자 도구를 켜두고:
- 로딩을 트리거하는 액션 수행
- 상태 값을 관찰:
isLoading이 언제 false가 되나? - Network 탭: API 요청이 정말 날아가고 응답이 오나?
API 응답이 30초 이상 없다면 서버 문제거나 네트워크 장애다. 그 경우는 타임아웃을 명시적으로 설정해서 사용자에게 에러 메시지를 보여줘야 한다.
# 모바일 환경에서 느린 네트워크 시뮬레이션
npm run build
# 개발자 도구 → Network → Throttling 설정
코드에서 흔한 실수
비동기 처리 후 상태 갱신을 빠뜨리는 경우가 많다:
// 나쁜 예: 에러 시 로딩 끝내지 않음
fetch(url).then(res => setData(res));
// 좋은 예: 모든 경로에서 로딩 종료
fetch(url)
.then(res => setData(res))
.catch(err => setError(err))
.finally(() => setIsLoading(false));
상태 흐름 기록하기
문제를 해결한 후 다음을 메모해둔다:
- 어떤 액션에서 발생했는가
- 어느 상태 변수가 업데이트되지 않았는가
- 어느 브라우저/디바이스에서만 발생했는가
모바일 환경과 데스크톱, 온라인과 오프라인 네트워크 상태를 모두 테스트하면 예상 밖의 버그를 줄일 수 있다. 작은 변경 후 실제 환경에서 배포해서 확인하는 습관이 중요하다.