React 18 Alpha의 Concurrent Rendering 테스트해보기
배경
지난주 React 18 Alpha가 공개되었다. 가장 눈에 띄는 변화는 Concurrent Rendering이다. 사내 대시보드에서 대량의 데이터를 렌더링할 때 입력 지연이 발생하는 문제가 있어, 이 기능을 테스트해보기로 했다.
기존 문제
검색어 입력 시 5000개 이상의 행을 필터링하면서 UI가 버벅이는 현상이 있었다. debounce를 적용했지만 근본적인 해결은 아니었다.
const [query, setQuery] = useState('');
const filteredData = data.filter(item =>
item.name.includes(query)
);
startTransition 적용
React 18의 startTransition을 사용해 필터링 작업의 우선순위를 낮췄다.
import { startTransition } from 'react';
const [query, setQuery] = useState('');
const [deferredQuery, setDeferredQuery] = useState('');
const handleChange = (e) => {
setQuery(e.target.value);
startTransition(() => {
setDeferredQuery(e.target.value);
});
};
const filteredData = data.filter(item =>
item.name.includes(deferredQuery)
);
결과
입력 필드는 즉시 반응하고, 리스트 업데이트는 약간 지연되지만 타이핑이 막히지 initial. 체감상 확실히 개선되었다.
주의사항
- Alpha 버전이므로 프로덕션 사용은 보류
createRoot로 마운트 방식이 변경됨- Suspense for Data Fetching은 아직 실험적 단계
정식 릴리즈 전까지 더 테스트가 필요하지만, Concurrent 기능의 방향성은 명확해 보인다. 내년쯤 실제 프로젝트에 적용할 수 있을 것 같다.