본문 바로가기
React

React에서 Lazy Loading 이미지 구현하기

by 굿센스굿 2024. 12. 17.
반응형

 

웹 애플리케이션에서 성능 최적화는 사용자 경험을 향상시키는 중요한 요소입니다. 특히 이미지가 많은 페이지에서는 모든 이미지를 한 번에 로드하면 페이지 로드 속도가 느려질 수 있습니다. 이를 해결하기 위한 기술 중 하나가 Lazy Loading입니다. Lazy Loading은 사용자가 필요로 하는 시점에 이미지를 로드하여 초기 로딩 시간을 단축하고 불필요한 네트워크 사용을 줄이는 방법입니다.

이번 글에서는 React에서 Lazy Loading 이미지를 구현하는 방법을 다양한 방식으로 소개하고, 이를 활용한 최적화 팁을 제공하겠습니다.


1. Lazy Loading 이미지의 동작 원리

Lazy Loading은 사용자가 이미지를 볼 때까지 해당 이미지를 로드하지 않는 기술입니다. 일반적으로 Intersection Observer API 또는 라이브러리를 사용하여 화면에 보이는 시점을 감지해 이미지를 로드합니다.

Lazy Loading의 장점

  1. 성능 개선: 초기 페이지 로드 시간이 단축됩니다.
  2. 데이터 절약: 필요한 이미지만 로드하므로 데이터 사용량이 줄어듭니다.
  3. UX 향상: 점진적으로 이미지를 로드하여 끊김 없는 사용자 경험을 제공합니다.

2. React에서 Lazy Loading 구현

기본 Intersection Observer를 이용한 구현

React에서 Intersection Observer를 사용하여 Lazy Loading을 구현할 수 있습니다.

import React, { useState, useEffect, useRef } from "react";

const LazyImage = ({ src, alt, placeholder, ...props }) => {
  const [isVisible, setIsVisible] = useState(false);
  const imgRef = useRef();

  useEffect(() => {
    const observer = new IntersectionObserver(
      ([entry]) => {
        if (entry.isIntersecting) {
          setIsVisible(true);
          observer.disconnect();
        }
      },
      { threshold: 0.1 } // 10%가 화면에 보일 때 로드
    );

    if (imgRef.current) {
      observer.observe(imgRef.current);
    }

    return () => {
      if (imgRef.current) observer.disconnect();
    };
  }, []);

  return (
    
  );
};

const LazyLoadingExample = () => {
  return (

React Lazy Loading 이미지 예제

스크롤해서 이미지를 확인하세요.
 
  );
};

export default LazyLoadingExample;

코드 설명

  1. Intersection Observer 설정: IntersectionObserver를 사용해 이미지가 화면에 나타나는 시점을 감지합니다.
  2. Placeholder 사용: 로딩 전에는 저해상도 이미지를 표시하여 로딩 전 빈 화면을 방지합니다.
  3. 효율적인 로드: 이미지를 로드한 뒤에는 observer.disconnect()로 성능을 최적화합니다.

3. React 라이브러리를 활용한 구현

Lazy Loading을 더욱 간편하게 구현하려면 react-lazy-load-image-component 라이브러리를 사용할 수 있습니다.

라이브러리 설치

npm install react-lazy-load-image-component

코드 예제

import React from "react";
import { LazyLoadImage } from "react-lazy-load-image-component";
import "react-lazy-load-image-component/src/effects/blur.css";

const LazyLoadingWithLibrary = () => {
  return (

React Lazy Loading 라이브러리 사용 예제

스크롤해서 이미지를 확인하세요.
 
  );
};

export default LazyLoadingWithLibrary;

라이브러리의 장점

  • 코드 작성이 간단하고 직관적입니다.
  • 다양한 효과(blur, opacity)를 기본 제공하여 스타일링이 용이합니다.
  • Intersection Observer API를 내부적으로 사용하여 최적화되어 있습니다.

4. 이미지 Lazy Loading 최적화 팁

  1. 이미지 크기 최적화:
    Lazy Loading은 대형 이미지로 인해 발생하는 성능 문제를 완전히 해결하지 못합니다. 따라서 이미지 크기를 줄이고, 적절한 포맷(WebP 등)을 사용하는 것이 중요합니다.
  2. 저해상도 Placeholder 사용:
    이미지가 로드되기 전에 저해상도 이미지를 Placeholder로 사용하면 화면 깜빡임을 방지할 수 있습니다.
  3. 로딩 애니메이션 추가:
    로드 중인 이미지를 시각적으로 표시하는 애니메이션을 추가하면 UX가 향상됩니다.
  4. SSR과 함께 사용:
    Next.js와 같은 서버사이드 렌더링(SSR) 환경에서는 next/image를 활용하여 자동 Lazy Loading을 구현할 수 있습니다.

5. Lazy Loading의 활용 사례

  1. 전자상거래 웹사이트:
    제품 목록 페이지에서 사용자가 볼 필요가 없는 이미지는 Lazy Loading을 통해 로드하여 성능을 최적화합니다.
  2. 갤러리 애플리케이션:
    무한 스크롤과 함께 Lazy Loading을 적용하여 사용자가 보는 시점에 이미지를 로드합니다.
  3. 블로그 플랫폼:
    이미지가 많은 긴 글에서 Lazy Loading을 활용해 초기 로딩 시간을 단축합니다.

6. 결론

React에서 Lazy Loading 이미지를 구현하면 페이지 로드 시간을 단축하고 네트워크 사용량을 줄이는 데 큰 도움이 됩니다. 기본 구현 방법부터 라이브러리를 활용한 간단한 방법까지 다양하게 적용할 수 있습니다.

이 글에서 다룬 방법을 통해 더 빠르고 효율적인 React 애플리케이션을 만들어보세요! Lazy Loading은 사용자와 개발자 모두에게 큰 이점을 제공하는 강력한 도구입니다.

반응형