프로그래밍/Next.js

[Next.js14 강의] 21강 - 성능 최적화 (Image 컴포넌트, 정적 자산 최적화)

월횽 2024. 9. 16. 06:30
728x90
반응형
SMALL

안녕하세요! 그레이해커 월횽입니다. 이 강의에서는 Next.js 애플리케이션의 성능을 최적화하는 방법을 학습합니다. 특히 Next.js에서 제공하는 Image 컴포넌트와 정적 자산 최적화 기법을 통해 페이지 로딩 속도를 개선하고 사용자 경험을 향상시킬 수 있습니다.

 

 

1. 성능 최적화의 중요성

성능이 중요한 이유는 사용자가 웹사이트를 빠르게 로드하고 상호작용할 수 있도록 도와주기 때문입니다. 성능이 저하되면 사용자 경험이 떨어지고, SEO 순위에도 부정적인 영향을 미칠 수 있습니다. Next.js는 성능 최적화를 위한 여러 기능을 제공하므로 이를 제대로 활용하는 것이 중요합니다.

 

 

2. Next.js의 Image 컴포넌트

Next.js는 Image 컴포넌트를 제공하여 이미지 최적화를 자동으로 처리합니다. 이는 이미지 로딩을 개선하고, 다양한 기기와 네트워크 환경에서 이미지가 효율적으로 표시되도록 도와줍니다.

반응형

Image 컴포넌트의 주요 특징

· 자동 최적화: Next.js는 자동으로 이미지를 적절한 크기로 변환하고, 사용자가 보는 화면 크기에 맞춰 이미지를 제공하는 'Responsive Image' 기능을 지원합니다.
· 지연 로딩(Lazy Loading): 사용자가 페이지를 스크롤할 때 필요한 이미지만 로드하여 초기 로딩 속도를 개선합니다.
· 모던 포맷 지원: WebP와 같은 최신 이미지 포맷을 지원하여 이미지 파일 크기를 줄입니다.

예제: Image 컴포넌트 사용하기

import Image from 'next/image';

export default function HomePage() {
  return (
    <div>
      <h1>홈 페이지에 오신 것을 환영합니다!</h1>
      <Image
        src="/images/sample.jpg" // 이미지 경로
        alt="샘플 이미지"
        width={800} // 너비
        height={600} // 높이
        priority // 페이지 최초 로딩 시 우선적으로 로드
      />
    </div>
  );
}

 

옵션 설명

· src: 이미지 파일의 경로입니다.
· alt: 이미지에 대한 설명으로, SEO와 접근성에 중요한 역할을 합니다.
· width와 height: 이미지를 표시할 때의 크기입니다. 자동으로 최적화되므로 다양한 크기로 변환됩니다.
· priority: 성능을 위해 중요한 이미지를 우선적으로 로드할 때 사용됩니다.

 

 

3. 정적 자산 최적화

Next.js에서는 정적 자산을 효율적으로 관리하여 페이지 로딩 속도를 개선할 수 있습니다. CSS, JavaScript, 이미지 파일과 같은 정적 자산의 최적화는 성능에 큰 영향을 미칩니다.

 

정적 자산 최적화 기법

 

코드 분할 (Code Splitting)

· Next.js는 페이지별로 필요한 JavaScript 코드만 로드하는 코드 분할 기능을 기본적으로 제공합니다.
· 이를 통해 초기 페이지 로딩 시간과 번들 크기를 줄일 수 있습니다.

728x90

정적 파일 제공

· public 디렉토리에 저장된 정적 자산은 CDN(Content Delivery Network)을 통해 최적화된 방식으로 제공됩니다.
· Next.js는 파일 이름에 해시 값을 추가하여 브라우저 캐싱을 활용합니다.

 

CSS 및 JavaScript의 미니파이(Minification)

· Next.js는 빌드 과정에서 자동으로 CSS와 JavaScript 파일을 압축(미니파이)하여 파일 크기를 줄이고 성능을 향상시킵니다.

 

이미지 압축 및 최신 포맷 사용

· 이미지 파일을 WebP 포맷으로 변환하면 파일 크기를 줄여 로딩 시간을 단축할 수 있습니다.
· Next.js의 이미지 최적화 기능을 통해 이미지 압축이 자동으로 처리됩니다.

 

 

4. 웹폰트 최적화

 

웹폰트 최적화 기법

웹폰트는 웹 페이지의 비주얼을 향상시키지만, 제대로 관리하지 않으면 로딩 속도를 저하시킬 수 있습니다.

SMALL

· 폰트 서브셋(Subsetting): 필요한 글리프만 포함하는 서브셋 폰트를 사용하여 불필요한 데이터를 줄입니다.
· Preload 사용: 중요한 폰트를 preload하여 브라우저가 폰트를 미리 로드하도록 설정합니다.
· 디스플레이 전략 설정: font-display: swap을 사용하여 폰트가 로드될 때까지 기본 폰트를 먼저 보여주는 방식을 설정할 수 있습니다.

 

예제: Google Fonts 최적화

<Head>
  <link
    href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"
    rel="stylesheet"
  />
</Head>

 

 

 

5. 성능 최적화 툴

· Lighthouse: 페이지 성능을 측정하는 Google의 오픈소스 툴로, 페이지 로딩 속도, 접근성, SEO 등을 분석할 수 있습니다.
· Web Vitals: Next.js는 웹사이트 성능을 측정하는 Web Vitals API를 기본적으로 제공하여 중요한 성능 지표인 CLS, LCP, FID 등을 모니터링할 수 있습니다.

// pages/_app.js
import { reportWebVitals } from 'next/web-vitals';

export function reportWebVitals(metric) {
  console.log(metric);
}

 

 

성능 최적화는 사용자 경험과 SEO에 매우 중요한 요소입니다. Next.js의 Image 컴포넌트와 정적 자산 최적화 기법을 잘 활용하면 웹사이트의 로딩 속도를 크게 향상시킬 수 있습니다. 성능을 지속적으로 모니터링하고 최적화하는 습관을 들이면 더욱 효율적인 웹사이트를 만들 수 있습니다.

 

 

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST