


export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={`${geistSans.variable} ${geistMono.variable}`}>
<header>
<Link href={"/"}>index</Link>
<Link href={"/search"}>search</Link>
<Link href={"/book/1"}>book/1</Link>
</header>
{children}
</body>
</html>
);
}

프리페칭 Pre-Fetching, 이동할 페이지에 필요한 컴포넌트를 JS Bundle로 받을 때. 요청이 들어올 때마다 작업을 실행하게 되면 번들 크기나 네트워크 상황에 따라 시간 지연이 발생할 수 있다. 그래서 이동할 페이지의 데이터를 미리 불러오는 프리페칭 작업을 통해 이를 최소화한다.
페이지가 정적인 경우에는 JS Bundle까지 모두 불러온다.
-> Page Router에서의 SSG 방식에 해당 (미리 만들어놓고 반환)하기 때문.
페이지가 동적인 경우에는 JS Bundle은 생략하고, RSC Payload만 불러온다.
-> Page Router에서의 SSR 방식에 해당 (요청이 들어올 때마다 생성하여 반환)하기 때문.
페이지의 유형이 정적/동적인 경우에 따라 프리페칭 Pre-Fetching가 다르게 동작한다.
-> 동적 페이지는 데이터가 모두 필요한지 아닌지 명확하게 파악할 수 없기 때문에 JS Bundle을 생략한다.
App Router에서는 Page Router와 달리, Router 객체에서 쿼리스트링을 가져올 수 없다.
-> App Router는 Router 객체에서 query 객체를 포함하지 않기 때문.
따라서 App Router에서는 쿼리스트링만 따로 가져올 수 있는 Hook useSearchParams()을 사용해야 한다.
-> Next.js가 자체적으로 제작해서 제공하는 Custom Hooks.
현재 페이지에 전달된 쿼리스트링의 값을 가져올 수 있는 기능을 제공한다.
// Page Router 방식
router.query.q;
// App Router 방식
const searchParams = useSearchParams();
const q = searchParams.get("q");
