Production Checklist
Next.js 애플리케이션을 프로덕션으로 배포하기 전에 최상의 사용자 경험, 성능 및 보안을 보장하기 위해 고려해야 할 몇 가지 최적화 및 패턴이 있습니다.
이 페이지에서는 애플리케이션을 빌드할 때, 프로덕션으로 이동하기 전에, 배포 후 사용할 수 있는 모범 사례와 자동 Next.js 최적화에 대해 안내합니다.
자동 최적화
다음 Next.js 최적화는 기본적으로 활성화되어 있으며 별도의 구성 없이 사용할 수 있습니다:
- 코드 분할: Next.js는 페이지별로 애플리케이션 코드를 자동으로 코드 분할합니다. 즉, 현재 페이지에 필요한 코드만 로드됩니다. 필요에 따라 서드파티 라이브러리를 지연 로드하는 것도 고려할 수 있습니다.
- 프리페칭: 링크가 사용자 뷰포트에 들어오면 Next.js는 백그라운드에서 해당 경로를 프리페칭합니다. 이로 인해 새로운 경로로의 탐색이 거의 즉시 이루어집니다. 필요에 따라 프리페칭을 옵트아웃할 수 있습니다.
- 자동 정적 최적화: Next.js는 차단 데이터 요구사항이 없는 페이지가 정적이라는 것을 자동으로 판단합니다. 최적화된 페이지는 캐시될 수 있으며 여러 CDN 위치에서 최종 사용자에게 제공될 수 있습니다. 필요에 따라 서버 사이드 렌더링을 선택할 수 있습니다.
이러한 기본 설정은 애플리케이션 성능을 향상시키고 각 네트워크 요청 시 전송되는 데이터 양과 비용을 줄이는 것을 목표로 합니다.
개발 중
애플리케이션을 빌드하는 동안 최상의 성능과 사용자 경험을 보장하기 위해 다음 기능을 사용하는 것이 좋습니다:
라우팅 및 렌더링
<Link>
컴포넌트: 클라이언트 측 탐색 및 프리페칭을 위해<Link>
컴포넌트를 사용합니다.- 커스텀 오류: 프로덕션에서 500 오류 및 404 오류를 처리하는 커스텀 오류 페이지를 생성합니다.
데이터 가져오기 및 캐싱
- API Routes: 백엔드 리소스에 액세스하기 위해 Route Handlers를 사용하고 민감한 비밀이 클라이언트에 노출되지 않도록 합니다.
- 데이터 캐싱: 데이터 요청이 캐시되는지 여부를 확인하고 필요한 경우 캐싱을 옵트인합니다.
getStaticProps
를 사용하지 않는 요청이 적절히 캐시되는지 확인합니다. - 증분 정적 재생성: 전체 사이트를 다시 빌드하지 않고 빌드 후 정적 페이지를 업데이트하려면 증분 정적 재생성을 사용합니다.
- 정적 이미지: 애플리케이션의 정적 자산을 자동으로 캐시하기 위해
public
디렉토리를 사용합니다.
UI 및 접근성
- 폰트 모듈: Font Module을 사용하여 폰트를 최적화하고, 폰트 파일을 다른 정적 자산과 함께 자동으로 호스팅하며, 외부 네트워크 요청을 제거하고 레이아웃 이동 (opens in a new tab)을 줄입니다.
<Image>
컴포넌트: 이미지 최적화 컴포넌트를 사용하여 이미지를 자동으로 최적화하고, 레이아웃 이동을 방지하며, WebP 또는 AVIF와 같은 최신 형식으로 제공합니다.<Script>
컴포넌트: 서드파티 스크립트를 최적화하는 컴포넌트를 사용하여 스크립트를 자동으로 지연시키고 메인 스레드를 차단하지 않도록 합니다.- ESLint: 내장된
eslint-plugin-jsx-a11y
플러그인을 사용하여 초기 접근성 문제를 찾아냅니다.
보안
- 환경 변수:
.env.*
파일을.gitignore
에 추가하고 공개 변수만NEXT_PUBLIC_
접두사를 사용하도록 합니다. - 콘텐츠 보안 정책: 크로스 사이트 스크립팅, 클릭재킹 및 기타 코드 삽입 공격과 같은 다양한 보안 위협으로부터 애플리케이션을 보호하기 위해 콘텐츠 보안 정책을 추가하는 것을 고려합니다.
메타데이터 및 SEO
<Head>
컴포넌트:next/head
컴포넌트를 사용하여 페이지 제목, 설명 등을 추가합니다.
타입 안전성
- TypeScript 및 TS 플러그인: TypeScript 및 TypeScript 플러그인을 사용하여 더 나은 타입 안전성을 확보하고, 오류를 조기에 발견할 수 있습니다.
프로덕션으로 가기 전에
프로덕션으로 가기 전에 next build
를 실행하여 로컬에서 애플리케이션을 빌드하고 빌드 오류를 확인한 후, next start
를 실행하여 프로덕션과 유사한 환경에서 애플리케이션의 성능을 측정할 수 있습니다.
핵심 웹 바이탈
- Lighthouse (opens in a new tab): 인프라에서 Lighthouse를 실행하여 사용자가 사이트를 어떻게 경험하는지 더 잘 이해하고 개선할 영역을 식별합니다. 이는 시뮬레이션된 테스트이며, 필드 데이터(예: 핵심 웹 바이탈)와 함께 확인해야 합니다.
번들 분석
@next/bundle-analyzer
플러그인을 사용하여 JavaScript 번들의 크기를 분석하고 애플리케이션 성능에 영향을 미칠 수 있는 큰 모듈 및 종속성을 식별합니다.
또한, 다음 도구를 사용하여 애플리케이션에 새로운 종속성을 추가할 때의 영향을 이해할 수 있습니다:
- Import Cost (opens in a new tab)
- Package Phobia (opens in a new tab)
- Bundle Phobia (opens in a new tab)
- bundlejs (opens in a new tab)
배포 후
애플리케이션을 배포한 후에는 추가 도구 및 통합을 사용하여 애플리케이션의 성능을 모니터링하고 개선할 수 있습니다.
Vercel 배포의 경우, 다음을 권장합니다:
- Analytics (opens in a new tab): 애플리케이션의 트래픽을 이해할 수 있는 내장 분석 대시보드를 사용하여 고유 방문자 수, 페이지 조회수 등을 파악합니다.
- Speed Insights (opens in a new tab): 방문자 데이터를 기반으로 한 실시간 성능 통찰력을 제공하여 사이트의 실질적인 성능을 이해합니다.
- Logging (opens in a new tab): 런타임 및 활동 로그를 사용하여 문제를 디버그하고 프로덕션에서 애플리케이션을 모니터링합니다. 또는, 통합 페이지 (opens in a new tab)에서 타사 도구 및 서비스를 확인할 수 있습니다.
알아두면 좋은 점:
Vercel에서의 프로덕션 배포에 대한 모범 사례를 종합적으로 이해하고 웹사이트 성능을 개선하기 위한 자세한 전략을 확인하려면 Vercel Production Checklist (opens in a new tab)를 참조하십시오.
이 권장 사항을 따르면 사용자를 위해 더 빠르고, 더 신뢰할 수 있으며, 더 안전한 애플리케이션을 구축할 수 있습니다.