Production Checklist
Next.js 애플리케이션을 프로덕션으로 배포하기 전에 최상의 사용자 경험, 성능 및 보안을 보장하기 위해 고려해야 할 몇 가지 최적화 및 패턴이 있습니다.
이 페이지에서는 애플리케이션을 빌드할 때, 프로덕션으로 이동하기 전에, 배포 후 사용할 수 있는 모범 사례와 자동 Next.js 최적화에 대해 안내합니다.
자동 최적화
다음 Next.js 최적화는 기본적으로 활성화되어 있으며 별도의 구성 없이 사용할 수 있습니다:
- Server Components: Next.js는 기본적으로 Server Components를 사용합니다. Server Components는 서버에서 실행되며 클라이언트에서 렌더링할 때 JavaScript가 필요하지 않습니다. 따라서 클라이언트 측 JavaScript 번들의 크기에 영향을 미치지 않습니다. 필요한 경우 Client Components를 사용할 수 있습니다.
- 코드 분할: Server Components는 경로 세그먼트별로 자동 코드 분할을 활성화합니다. 필요에 따라 Client Components 및 서드파티 라이브러리를 지연 로드하는 것도 고려할 수 있습니다.
- 프리페칭: 링크가 사용자 뷰포트에 들어오면 Next.js는 백그라운드에서 해당 경로를 프리페칭합니다. 이로 인해 새로운 경로로의 탐색이 거의 즉시 이루어집니다. 필요에 따라 프리페칭을 옵트아웃할 수 있습니다.
- 정적 렌더링: Next.js는 빌드 타임에 서버에서 Server 및 Client Components를 정적으로 렌더링하고 렌더링 결과를 캐시하여 애플리케이션 성능을 향상시킵니다. 필요에 따라 특정 경로에 대해 동적 렌더링을 선택할 수 있습니다.
- 캐싱: Next.js는 데이터 요청, Server 및 Client Components의 렌더링 결과, 정적 자산 등을 캐싱하여 서버, 데이터베이스 및 백엔드 서비스로의 네트워크 요청 수를 줄입니다. 필요에 따라 캐싱을 옵트아웃할 수 있습니다.
이러한 기본 설정은 애플리케이션 성능을 향상시키고 각 네트워크 요청 시 전송되는 데이터 양과 비용을 줄이는 것을 목표로 합니다.
개발 중
애플리케이션을 빌드하는 동안 최상의 성능과 사용자 경험을 보장하기 위해 다음 기능을 사용하는 것이 좋습니다:
라우팅 및 렌더링
- 레이아웃: 레이아웃을 사용하여 페이지 간 UI를 공유하고 탐색 시 부분 렌더링을 활성화합니다.
<Link>
컴포넌트:<Link>
컴포넌트를 사용하여 클라이언트 측 탐색 및 프리페칭을 수행합니다.- 오류 처리: 프로덕션에서 모든 오류 처리 및 404 오류를 처리하는 커스텀 오류 페이지를 생성합니다.
- 컴포지션 패턴: Server 및 Client Components에 대한 권장 컴포지션 패턴을 따르고
"use client"
경계 배치를 확인하여 클라이언트 측 JavaScript 번들을 불필요하게 증가시키지 않도록 합니다. - 동적 함수:
cookies()
와searchParams
프로퍼티와 같은 동적 함수는 전체 경로를 동적 렌더링으로 전환합니다(또는 루트 레이아웃에서 사용될 경우 애플리케이션 전체가 동적 렌더링으로 전환됨). 동적 함수 사용이 의도적인지 확인하고 적절한 경우<Suspense>
경계로 래핑합니다.
알아두면 좋은 점: 부분 사전 렌더링(실험적)은 경로의 일부가 동적이더라도 전체 경로가 동적 렌더링으로 전환되지 않도록 합니다.
데이터 가져오기 및 캐싱
- Server Components: Server Components를 사용하여 서버에서 데이터를 가져오는 이점을 활용합니다.
- Route Handlers: Client Components에서 백엔드 리소스에 액세스하기 위해 Route Handlers를 사용합니다. 그러나 추가 서버 요청을 피하기 위해 Server Components에서 Route Handlers를 호출하지 마십시오.
- 스트리밍: Loading UI 및 React Suspense를 사용하여 서버에서 클라이언트로 UI를 점진적으로 전송하고 데이터를 가져오는 동안 전체 경로가 차단되지 않도록 합니다.
- 병렬 데이터 가져오기: 필요한 경우 데이터를 병렬로 가져와 네트워크 워터폴을 줄입니다. 또한 적절한 경우 데이터 미리 로드를 고려합니다.
- **[데이터 캐싱](/docs/app/build
ing-your-application/caching#data-cache):** 데이터 요청이 캐시되는지 여부를 확인하고 필요한 경우 캐싱을 옵트인합니다. fetch
를 사용하지 않는 요청이 캐시되는지 확인합니다.
- 정적 이미지: 애플리케이션의 정적 자산을 자동으로 캐시하기 위해
public
디렉토리를 사용합니다.
UI 및 접근성
- 폼 및 유효성 검사: Server Actions를 사용하여 폼 제출, 서버 측 유효성 검사 및 오류 처리를 수행합니다.
- 폰트 모듈: Font Module을 사용하여 폰트를 최적화하고, 폰트 파일을 다른 정적 자산과 함께 자동으로 호스팅하며, 외부 네트워크 요청을 제거하고 레이아웃 이동 (opens in a new tab)을 줄입니다.
<Image>
컴포넌트: 이미지 최적화 컴포넌트를 사용하여 이미지를 자동으로 최적화하고, 레이아웃 이동을 방지하며, WebP 또는 AVIF와 같은 최신 형식으로 제공합니다.<Script>
컴포넌트: 서드파티 스크립트를 최적화하는 컴포넌트를 사용하여 스크립트를 자동으로 지연시키고 메인 스레드를 차단하지 않도록 합니다.- ESLint: 내장된
eslint-plugin-jsx-a11y
플러그인을 사용하여 초기 접근성 문제를 찾아냅니다.
보안
- 타이팅: 데이터 객체 및/또는 특정 값을 타이팅하여 민감한 데이터가 클라이언트에 노출되지 않도록 합니다.
- Server Actions: 사용자가 Server Actions를 호출할 수 있는 권한이 있는지 확인합니다. 권장 보안 관행을 검토합니다.
- 환경 변수:
.env.*
파일을.gitignore
에 추가하고 공개 변수만NEXT_PUBLIC_
접두사를 사용하도록 합니다. - 콘텐츠 보안 정책: 크로스 사이트 스크립팅, 클릭재킹 및 기타 코드 삽입 공격과 같은 다양한 보안 위협으로부터 애플리케이션을 보호하기 위해 콘텐츠 보안 정책을 추가하는 것을 고려합니다.
메타데이터 및 SEO
- 메타데이터 API: 페이지 제목, 설명 등을 추가하여 애플리케이션의 검색 엔진 최적화(SEO)를 향상시키기 위해 메타데이터 API를 사용합니다.
- Open Graph(OG) 이미지: 애플리케이션을 소셜 공유에 대비하기 위해 OG 이미지를 생성합니다.
- 사이트맵 및 로봇: 검색 엔진이 페이지를 크롤링하고 인덱싱할 수 있도록 사이트맵 및 로봇 파일을 생성합니다.
타입 안전성
- TypeScript 및 TS 플러그인: TypeScript 및 TypeScript 플러그인을 사용하여 더 나은 타입 안전성을 확보하고, 오류를 조기에 발견할 수 있습니다.
프로덕션으로 가기 전에
프로덕션으로 가기 전에 next build
를 실행하여 로컬에서 애플리케이션을 빌드하고 빌드 오류를 확인한 후, next start
를 실행하여 프로덕션과 유사한 환경에서 애플리케이션의 성능을 측정할 수 있습니다.
핵심 웹 바이탈
- Lighthouse (opens in a new tab): 인프라에서 Lighthouse를 실행하여 사용자가 사이트를 어떻게 경험하는지 더 잘 이해하고 개선할 영역을 식별합니다. 이는 시뮬레이션된 테스트이며, 필드 데이터(예: 핵심 웹 바이탈)와 함께 확인해야 합니다.
useReportWebVitals
훅: 이 훅을 사용하여 핵심 웹 바이탈 (opens in a new tab) 데이터를 분석 도구로 전송합니다.
번들 분석
@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)를 참조하십시오.
이 권장 사항을 따르면 사용자를 위해 더 빠르고, 더 신뢰할 수 있으며, 더 안전한 애플리케이션을 구축할 수 있습니다.