문제 배경

앞서 측정한 성능 지표는 다음과 같다.

FCP, LCP 모두 매우 느린 수치였고, TBT 역시 사이트의 단순성을 감안하면 비효율적인 결과였다. 특히 사용자가 사이트에 처음 접속했을 때 오랜 시간 정적인 화면만 보게 되는 UX 저하 문제로 이어졌다.

개선 과정

원인 분석

코드 분할 적용

React에서 공식적으로 지원하는 lazy() 함수와 Suspense 컴포넌트를 사용하여 각 페이지 단위로 동적 import를 적용하였다. 또한 react-router-dom의 각 라우트 항목에 대해 Suspense로 감싸면서 fallback 컴포넌트를 제공하여 사용자 경험을 향상시켰다.

const Home = lazy(() => import('../pages/Home/Home'));
...
{
  path: "/localfood",
  element: (
    <Suspense fallback={<PageLoading />}>
      <LocalFoodPage />
    </Suspense>
  )
}