Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 서버
- 백엔드
- JavaScript
- 정리
- BACK-END
- MySQL
- 디자인 패턴
- 프론트엔드
- jsp
- jpa
- spring
- 프런트엔드
- Next.js
- 스프링
- node.js
- 오라클
- SQL
- 미니정리
- java
- 스프링부트
- 쿼리
- 프로그래머스
- 코드 테스트
- web
- 데이터베이스
- 자바스크립트
- 알고리즘
- oracle
- 코드테스트
- 자바
Archives
- Today
- Total
참치코더의 꿈 메모장
Next.js / pages 라우팅 공통 레이아웃 & 개별 레이아웃 적용 방법 본문
728x90

Next.js pages 디렉토리 기반 라우팅에서는 App 컴포넌트를 사용해 전체 앱의 공통 레이아웃을 설정하고,
각 페이지에서 getLayout 패턴을 사용하여 개별 레이아웃을 지정할 수 있다.
전체 페이지에 공통 레이아웃 적용하기
- Next.js는 pages 라우팅에서 pages/_app.js 파일을 통해 앱의 루트 컴포넌트를 정의한다.
따라서 _app.js에서 원하는 공통 레이아웃(헤더, 푸터)을 감싸주면 모든 페이지에 자동 적용된다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//components/Layout.js
export default function Layout({children}){
return (
<div>
<header style={{ background: "#eee", padding: "10px" }}>
<h1>공통 헤더</h1>
</header>
<main style={{ padding: "20px"}}>
{children}
</main>
<footer style={{ background: "#eee", padding: "10px" }}>
<p>공통 푸터</p>
</footer>
</div>
);
}
// 공통 레이아웃 적용
// pages/_app.js
import Layout from "../components/Layout";
export default function App({ Component, pageProps}){
return (
<Layout>
<Component {...pageProps}/>
// 현재 요청된 URL에 해당하는 컴포넌트(Component)에 Next.js가 기본설정 Props 값 (/SSR/SSG)을 자동으로 뿌려준다.
</Layout>
);
}
|
cs |
특정 페이지에 개별 레이아웃 적용하는 방법
각 페이지 컴포넌트마다 getLayout이라는 함수를 정의하고, _app.js에서 이것을 감싸는 구조를 만든다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
// pages/_app.js
export default function App({Component, pageProps}) {
// 페이지 컴포넌트에 getLayout이 있으면 사용하고, 없으면 기본 레이아웃으로 렌더링
const getLayout = Component.getLayout || ((page)=> page);
return getLayout(<Component {...pageProps} />);
}
// 개별 페이지에서 getLayout 정의
//pages/dashboard.js
import DashboardLayout from "../components/DashboardLayout"
function DashboardPage(){
return <h2>대시보드 페이지</h2>;
}
// 이 페이지만의 레이아웃 설정
DashboardPage.getLayout = function getLayout(page){
return <DashboardLayout>{page}</DashboardLayout>;
};
export default DashboardPage;
// 개별 레이아웃 컴포넌트
// components/DashboardLayout.js
export default function DashboardLayout({children}){
return (
<div style={{ background: "#fafafa", padding: "20px" }}>
<h1>대시보드 전용 레이아웃</h1>
{children}
</div>
);
}
|
cs |
이러한 방식으로 글로벌 레이아웃과 개별 레이아웃 모두 유연하게 구성할 수 있다.
728x90
'Next.js' 카테고리의 다른 글
| Next.js App Router에서 페이지 라우팅 & 레이아웃 설정 하기 (0) | 2026.01.02 |
|---|---|
| React / useEffect의 3가지 기능 (0) | 2025.11.15 |
| Next.js / ISR(Incremental Static Regeneration), 메타데이터 설정법 정리 (0) | 2025.11.11 |
| Next.js / SSG(Static Site Generation) 미니 정리 (0) | 2025.11.07 |
| Next.js / 정적 메타 데이터 VS 동적 메타 데이터 비교 (0) | 2025.10.10 |
Comments