본문 바로가기
Front end/React

[React] Lazy Loading

by 더 이프 2024. 11. 11.
728x90

목차

    React에서의 Lazy Loading과 코드 분할: 애플리케이션 성능 최적화하기

    안녕하세요, 웹 개발자 여러분! 대규모 React 애플리케이션을 구축할 때 애플리케이션의 로딩 시간을 줄이고 성능을 개선하는 것은 매우 중요합니다. 오늘은 React에서 제공하는 Lazy Loading과 코드 분할 기능을 활용하여 애플리케이션의 성능을 최적화하는 방법에 대해 알아보겠습니다. 이 기법들을 통해 사용자 경험을 향상시키고, 효율적인 리소스 관리를 할 수 있습니다.


    코드 분할의 필요성

    전통적인 React 애플리케이션은 단일 번들 파일로 구성되곤 합니다. 이 방식은 초기 로드 시 모든 스크립트와 의존성을 한 번에 로드하기 때문에, 사용자가 실제로 방문하지 않을 수 있는 컴포넌트까지 로딩해야 합니다. 이는 애플리케이션의 로딩 시간을 길게 하고, 트래픽 비용도 증가시킵니다. 코드 분할은 이러한 문제를 해결할 수 있는 효과적인 방법입니다.

     

    React에서의 코드 분할 구현

    React에서는 React.lazySuspense 컴포넌트를 통해 쉽게 코드 분할과 Lazy Loading을 구현할 수 있습니다. 이 기능을 사용하면 컴포넌트를 필요할 때만 로드하도록 설정할 수 있어, 애플리케이션의 시작 시간을 크게 단축시킬 수 있습니다.

    React.lazy

    React.lazy 함수는 동적 import()를 사용하여 컴포넌트를 로드합니다. 이 방식은 컴포넌트를 별도의 번들로 분할하여, 초기 로드 시 번들의 크기를 줄이고 필요할 때만 해당 컴포넌트를 가져올 수 있게 해줍니다.

    import React, { Suspense } from 'react';
    
    const OtherComponent = React.lazy(() => import('./OtherComponent'));
    
    function MyComponent() {
      return (
        <div>
          <Suspense fallback={<div>Loading...</div>}>
            <OtherComponent />
          </Suspense>
        </div>
      );
    }

    Suspense

    Suspense 컴포넌트는 Lazy Loading 컴포넌트가 로드될 때까지 대체할 수 있는 fallback 컨텐츠를 제공합니다. 이는 사용자에게 로드 중임을 알리는 우아한 방법을 제공하며, 로딩 경험을 개선합니다.

     

    실제 적용 예시

    이러한 기법을 실제 애플리케이션에 적용하기 위해서는 각 페이지 또는 라우트 별로 컴포넌트를 분할하는 것이 좋습니다. 예를 들어, 사용자가 접근하지 않는 관리자 페이지는 별도의 청크로 분할하여 필요할 때만 로드하도록 할 수 있습니다.

     

    마무리하며...

    Lazy Loading과 코드 분할은 React 애플리케이션의 성능을 개선하는 데 매우 중요한 기법입니다. 이를 통해 애플리케이션의 로드 시간을 단축시키고, 리소스를 효율적으로 관리할 수 있습니다. 이 기법들을 적극적으로 활용하여 사용자에게 더 빠르고 쾌적한 경험을 제공해 보세요!


    Reference:

     

    Code-Splitting – React

    A JavaScript library for building user interfaces

    legacy.reactjs.org

     

     

    Code Splitting | webpack

    webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

    webpack.js.org