
1. Layout
2. Root Layout
3. ๊ณตํต๋ ๊ฒฝ๋ก๋ก ์์๋์ง ์๋ page์ ๋์ผ Layout ์ค์ ๋ฒ
๋ฐฉ๋ฒ
1. Layout

- ํน์ ํด๋ ์๋ layout.tsx๋ผ๋ ํ์ผ์ ๋ง๋ค๊ฒ ๋๋ฉด,
ํด๋น layout ํ์ผ์
ํด๋ ์์ ์๋ ๋ชจ๋ page ์ปดํฌ๋ํธ์
๋๊ฐ์ด ์ ์ฉ๋๋ Layout์ ์ ์ํ๊ฒ ๋๋ ๊ฒ!

/search/setting/page.tsx ์ด์ง๋ง,
=> search ํ์์ Layout์ด ๋ ์ด์์์ผ๋ก ์ ์ฉ!
↑

๊ทธ๋ ๋ค๋ฉด,
- /search / layout.tsx ์๋ ๋ ์ด์์์ด ์กด์ฌํ๊ณ ,
- /search / setting / layout.tsx ํ์ ํด๋์ธ setting์๋ ๋ ์ด์์์ด ์กด์ฌํ๋ฉด?
=> ์ค์ฒฉ Layout์ด ๋์ด ๋ํ๋๊ฒ ๋๋ค.
2. Root Layout
ํ๋ก์ ํธ๋ฅผ ์ฒ์ ๋ง์ฃผํ๋ฉด, app / layout.tsx ํ์ผ์ ๋ณด๊ฒ ๋๋ค.
=> ์ด๋ Global Layout ๋๋ Root Layout์ผ๋ก Next.js ์ฑ์ ๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ ์ผ๋ก ์ ์ฉ์ด ๋๋ ๋ ์ด์์
=> ๊ฒฐ์ฝ ์์ด์ ธ์๋ ์ ๋๊ณ , name์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ญ์ ํ๋ฉด ์๋์ผ๋ก ์์ฑ์ด ๋๋ค.
# app/layout.tsx (root layout)
export default function RootLayout({ children,}: Readonly<{children: React.ReactNode;}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
}
- children props๋ก ํ์ฌ page์ ์ญํ ์ ํ page ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฌ๋ฐ์์
- return ๋ฌธ ๋ด๋ถ์์ <html> ๋ด๋ถ, <body> ๋ด๋ถ์ {children} ์ผ๋ก page ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํ๋ค.
(TIP)
Layout.tsx๋ก ์์ฑํ ๋ ์ด์์์ ์๋์ผ๋ก 'children'์ด๋ผ๋ props๋ฅผ ํตํด
ํ์ฌ page ์ปดํฌ๋ํธ๊ฐ ์ ๋ฌ์ด ๋ ์ ์๊ฒ ๋์ด์์ด์ ๊ฐ์ ธ๋ค ์ฐ๊ณ ,
return๋ฌธ ์์ page ์ปดํฌ๋ํธ๋ฅผ ์ด๋์ ๋ฐฐ์นํ ๊ฑด์ง ์ง์ ์ค์ ์ ํด์ค์ผํ๋ค.
import {ReactNode} from "react";
export default function Layout({ children }: {children: ReactNode}) {
return (
<>
<div> ์์ ์์น๋ฐ </div>
{children}
</>
);
}
- { children } props ํ์ ์ ์๋ฅผ ํด์ค์ผํ๋๋ฐ,
- { children }: { } =====> ๊ฐ์ฒด์ธ๋ฐ,
- { children }: {children: } =====> children์ ํฌํจํ๋ ๊ฐ์ฒด์ด๋ฉด ๋๊ณ ,
- { children }: {children: ReactNode} =====> ReactNode ํ์ ์ด๋ค.
3. ๊ณตํต๋ ๊ฒฝ๋ก๋ก ์์๋์ง ์๋ page์ ๋์ผ Layout ์ค์ ๋ฒ
โญ๏ธ " RouteGroup " : ๊ฒฝ๋ก์์๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฏธ์น์ง ์๋ ํด๋ ์๋ฏธ
=> app / ('xxxx') : app ํ์์ ์๊ดํธ () ๋ก ๋ง๋ ํด๋
- ๊ฒฝ๋ก์ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ๋ ์๋ก ๋ค๋ฅธ ๊ฒฝ๋ก์ page์ layout์ ์ ์ฉ O
![]() |
![]() |
- (with-searchbar) ๋ผ๋ RouteGroup์ ๋ง๋ค์์. (app ํ์ ์กด์ฌ)
ใด> root page.tsx ์ปดํฌ๋ํธ ์ด๋
ใด> ํน์ layout.tsx ์ปดํฌ๋ํธ ์ด๋ (๊ฒฝ๋ก ๋ฌด๊ด ์ง์ ํ )
=> root page์ /search page ๋ชจ๋์ ๋์ผํ ๋ ์ด์์์ด ์ง์ ๋จ!
=> RouteGroup ๋ฐ์ /book page๋ ๊ณตํต ๋ ์ด์์ X
'๐ป DEV > NextJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Next JS] searchbar ๋ง๋ค๊ธฐ (feat. co-location) (0) | 2025.08.30 |
|---|---|
| [Next JS] ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ (feat. FCP, TTI) (1) | 2025.08.30 |
| [Next JS] ๋์ ๊ฒฝ๋ก ๋ผ์ฐํ : ํด๋/[ ]/page.tsx (feat : Catch all segment, optional catch all segment) (0) | 2025.08.27 |
| [Next JS] queryString (1) | 2025.08.27 |
| [NEXT.js] 5. Link ์ปดํฌ๋ํธ ์ฌ์ฉ ์ด์ ( new- link ) (0) | 2024.06.19 |


๋๊ธ