React 19 Compiler 도입 후 번들 크기 12% 감소
배경
회사 대시보드 프로젝트에 React 19 Compiler를 적용했다. 기존 코드베이스에 useMemo와 useCallback이 과도하게 사용되고 있었는데, Compiler가 자동으로 메모이제이션을 처리해준다는 점이 매력적이었다.
적용 과정
npm install react@19 react-dom@19
npm install -D babel-plugin-react-compiler
바벨 설정에 플러그인을 추가했다.
// babel.config.js
module.exports = {
plugins: [
['babel-plugin-react-compiler', {
target: '19'
}]
]
}
리팩토링
기존 코드에서 불필요한 useMemo/useCallback을 제거했다.
// Before
const filteredData = useMemo(() =>
data.filter(item => item.active), [data]
);
const handleClick = useCallback(() => {
setCount(c => c + 1);
}, []);
// After
const filteredData = data.filter(item => item.active);
const handleClick = () => {
setCount(c => c + 1);
};
결과
- 번들 크기: 1.2MB → 1.06MB (12% 감소)
- 코드 라인 수: 약 300줄 감소
- Lighthouse 성능 점수: 82 → 87
주의사항
컴파일러가 최적화하지 못하는 케이스도 있었다. 특히 외부 라이브러리와의 통합 부분에서는 여전히 명시적 메모이제이션이 필요했다. React DevTools Profiler로 확인하면서 점진적으로 적용하는 것을 추천한다.
전체적으로는 만족스러운 결과였다. 코드가 간결해지고 성능도 개선됐다.