Next.js의 네비게이션 최적화

 
전통적으로 html에는 하이퍼링크인 a 태그가 있다.
Next.js에서는 페이지간 이동에 Link 컴포넌트를 이용할 것을 권장하고 있다.
어떤 것들을 하길래?
 
Link에 있는 페이지들을 백그라운드에서 미리 요청해서 갖고 있는다.
navigate 요청이 오면 미리 받아둔 페이지를 바로 보여준다.
 
Next.js에서 라우팅 및 내비게이션 방법
Next.js에서는 라우트 간 내비게이션을 위한 네 가지 방법이 있습니다:
  • <Link> 컴포넌트:
  • HTML의 <a> 태그를 확장하여 클라이언트 측 내비게이션과 프리패칭을 제공합니다.
  • 사용 예:
    • import Link from 'next/link';
      export default function Page() {
      return <Link href="/dashboard">Dashboard</Link>;
      }
2.
useRouter() 훅
:
  • 클라이언트 컴포넌트에서 프로그래밍적으로 라우트를 변경할 수 있습니다.
  • 사용 예:
    • 'use client';
      import { useRouter } from 'next/navigation';
      export default function Page() {
      const router = useRouter();
      return (
      <button type="button" onClick={() => router.push('/dashboard')}>
      Dashboard
      </button>
      );
      }
3.
redirect 함수
:
  • 서버 컴포넌트에서 사용하여 리다이렉트를 수행합니다.
  • 사용 예:
    • import { redirect } from 'next/navigation';
      export default async function Profile({ params }) {
      const id = (await params).id;
      if (!id) {
      redirect('/login');
      }
      // ...
      }
  • 네이티브 History API:
  • window.history.pushState와 window.history.replaceState를 사용하여 브라우저의 히스토리 스택을 업데이트합니다.
  • 사용 예:
    • 'use client';
      export default function SortProducts() {
      function updateSorting(sortOrder) {
      window.history.pushState(null, '', `?sort=${sortOrder}`);
      }
      return (
      <>
      <button onClick={() => updateSorting('asc')}>Sort Ascending</button>
      <button onClick={() => updateSorting('desc')}>Sort Descending</button>
      </>
      );
      }

라우팅 및 내비게이션 작동 방식

  • 코드 분할:
  • 서버 컴포넌트는 라우트 세그먼트에 따라 자동으로 코드가 분할되어 필요한 코드만 로드됩니다.
  • 프리패칭:
  • <Link> 컴포넌트를 사용하면 사용자가 보게 될 라우트를 미리 로드합니다. 페이지가 처음 로드되거나 스크롤을 통해 보일 때 자동으로 프리패칭됩니다.
  • 캐싱:
  • Next.js는 클라이언트 측에서 라우터 캐시를 사용하여 방문한 라우트의 데이터를 저장합니다. 이를 통해 성능을 개선합니다.
  • 부분 렌더링:
  • 내비게이션 시 변경된 라우트 세그먼트만 렌더링되고, 공유된 세그먼트는 유지됩니다. 이를 통해 데이터 전송량과 실행 시간을 줄입니다.
  • 소프트 내비게이션:
  • Next.js는 페이지 간 소프트 내비게이션을 지원하여 클라이언트 상태를 유지합니다.
  • 뒤로 및 앞으로 내비게이션:
  • 기본적으로 Next.js는 뒤로 및 앞으로 내비게이션 시 스크롤 위치를 유지합니다.