Featured image of post Next.js 앱 라우터의 성능 최적화를 위한 핵심 사항Featured image of post Next.js 앱 라우터의 성능 최적화를 위한 핵심 사항

Next.js 앱 라우터의 성능 최적화를 위한 핵심 사항

RSC 및 이미지 최적화에 중점을 두고 Next.js App Router의 성능을 최적화하는 주요 기술을 알아보세요.

React 18 기능을 활용하는 Next.js App Router는 최신 웹 프런트엔드 구축을 위한 고성능 아키텍처를 제공합니다.

그러나 서버-클라이언트 경계 또는 캐싱 규칙을 잘못 구성하면 응답 시간이 느려질 수 있습니다. 이 가이드에서는 엄청나게 빠른 Next.js 애플리케이션을 구축하기 위한 실용적인 최적화 기술을 살펴봅니다.


1. React Server 구성요소(RSC) 최대화

앱 라우터의 주요 이점은 모든 구성 요소가 기본적으로 서버 구성 요소라는 것입니다. 이렇게 하면 클라이언트측 번들에서 JavaScript의 상당 부분이 제거됩니다.

💡 최적화 규칙: "use client"을 나뭇잎에 푸시

파일 상단에 "use client"을 선언하면 그 아래에 있는 전체 가져오기 트리가 브라우저에서 다운로드됩니다. 최적화하려면 대화형 기능(예: 버튼, 상태 후크, 부작용)을 작은 리프 구성 요소로 분리하세요.

// ✕ Anti-pattern: Turning the entire page into a Client Component
'use client'
export default function Page() {
  const [data, setData] = useState(null)
  return <div>{/* Heavy static contents */}</div>
}

// ◯ Best practice: Nest Client Components inside Server Components
import HeavyStaticContent from './HeavyStaticContent' // RSC
import ClientInteractiveButton from './ClientInteractiveButton' // Client

export default function Page() {
  return (
    <div>
      <HeavyStaticContent />
      <ClientInteractiveButton />
    </div>
  )
}

2. next/image을 사용한 지능형 이미지 처리

뷰포트의 이미지는 LCP(Largest Contentful Paint) 점수에 큰 영향을 미칩니다.

💡 priority을 사용하여 중요 자산 사전 로드

보조 스크립트를 구문 분석하기 전에 브라우저가 자산을 미리 로드할 수 있도록 기본 히어로 이미지나 로고에 priority 속성을 추가해야 합니다.

import Image from 'next/image'

export default function Hero() {
  return (
    <div className="hero-banner">
      <Image
        src="/images/hero-visual.png"
        alt="Hero Image"
        width={1200}
        height={630}
        priority // Force Preloading
        sizes="(max-width: 768px) 100vw, 1200px"
      />
    </div>
  )
}

또한 서버가 대규모 데스크탑 해상도를 소형 모바일 디스플레이에 제공하지 못하도록 sizes 속성을 정확하게 정의하십시오.


3. 분할 및 동적 가져오기

초기 페이지 무게를 최적화하려면 무거운 라이브러리나 선택적 구성 요소(예: 모달 창)를 분할하여 트리거될 때만 로드되도록 합니다.

import dynamic from 'next/dynamic'

// Do not bundle this modal during the initial page load
const HeavyModal = dynamic(() => import('./HeavyModal'), {
  ssr: false, // Exclude from Server-Side Rendering
})

4. 요약: 측정, 구축, 감사

JavaScript 번들 크기 및 서버 응답 시간(TTFB)을 프로파일링하려면 항상 Lighthouse 또는 Chrome DevTools을 사용하여 감사를 실행하세요. 서버 구성 요소의 강력한 기능을 활용하여 최적화되고 빠른 사용자 경험을 제공하세요.