Next.js는 React를 기반으로 한 프레임워크로, Page Router라는 라우팅 방식을 제공한다. 이는 React Router처럼 페이지 간 이동을 관리하지만, 파일 구조를 기반으로 라우팅을 자동으로 처리해주는 기능을 내장하고 있어 개발자에게 많은 편의를 제공한다.
Next.js의 Page Router는 "pages" 폴더 안의 파일 및 폴더 구조에 따라 자동으로 라우팅을 설정해주는 라우터이다. React에서 사용하는 React Router처럼 페이지 간 이동을 처리하지만, 파일명과 폴더 구조에 맞춰 페이지 경로가 자동으로 결정된다는 점에서 차이가 있다.
Next.js 프로젝트의 pages 폴더에 파일을 추가하는 것만으로 페이지를 생성할 수 있다. 예를 들어, pages/about.js 파일을 생성하면 /about 경로로 라우팅이 자동으로 설정된다.
pages/index.js는 / 경로로, pages/about.js는 /about 경로로 매핑된다.
search 폴더를 생성하고 그 안에 index.js 파일을 넣으면 해당 폴더 이름이 경로로 사용된다. 예를 들어, pages/search/index.js는 /search 경로로 라우팅된다.
Next.js는 동적 경로 설정도 매우 간단하다. 동적 경로는 URL에 어떠한 변할 수 있는 가변적인 값을 포함하고 있는 경로를 말한다(ex: /country/1, ~/country/2 ..., ~/country/100). 블로그의 게시글 페이지나 상품의 상세 페이지 같은 곳에서 자주 사용된다.

동적 경로를 설정하려면, 대괄호를 사용하여 파일을 생성하면 된다.
ex: pages/country/[code].js . 이 파일은 /country/1, /country/2 등 변동 가능한 숫자나 문자열을 포함한 경로에 대응하는 페이지를 생성한다. 그래서 이 동적 경로에 있는 가변적인 값이 대괄호 속에 있는 code에 하나씩 mapping되는식으로 페이지 라우팅이 설정된다.
이처럼 Next.js의 Page Router는 파일명과 폴더 구조만으로 손쉽게 라우팅을 설정할 수 있어, 기존의 React Router에 비해 훨씬 편리하다.
Next.js 프로젝트는 npx(Node Package Executor) 명령어를 사용해 간편하게 생성할 수 있다. npx는 최신 버전의 Node 패키지를 다운로드 없이 실행할 수 있는 도구로, 아래 명령어를 통해 Next.js 프로젝트를 생성할 수 있다.
npx create-next-app@버전 or latest 프로젝트이름
Next.js 앱을 실행하려면 두 가지 모드를 사용할 수 있다 (개발 모드 & 프로덕션 모드)
npm run dev (개발 모드로 Next App 실행)
npm run start
따라서, Next.js는 개발 중에는 빠른 피드백과 수정 작업을 위해 npm run dev로 앱을 실행하며, 배포 시에는 최적화된 상태로 실행하는 npm run start를 사용하게 된다.
Next.js 프로젝트를 생성하고 나면, 다양한 파일과 폴더가 포함된 기본 구조를 볼 수 있다.
Next.js도 결국 react를 기반으로 만들어진 react확장판 개념의 프레임워크이기 때문에 public폴더가 존재한다거나, src폴더가 존재하는등 기존의 react앱과 매우 유사한 폴더 구조를 가지고 있는데 각 폴더를 살펴보자면,
public폴더는 웹 애플리케이션에서 정적 파일을 보관하는 곳이다. 이 폴더 아래에는, 로고 이미지나 favicon 같은 파일들처럼 페이지 내부에서 사용할 이미지 파일들 같은 정적인 파일들이 보관되어 있으며, 별도의 설정 없이 /logo.png와 같은 경로로 접근할 수 있다. src폴더 아래에는, pages폴더가 있는데, page의 역할을 할 컴포넌트들을 보관할 파일들을 경로에 맞게 보관할 수 있도록 되어있다.

index.tsx 파일은 Next.js 앱의 메인 페이지를 담당하는 파일이며, 그 안에 작성된 컴포넌트가 홈페이지에 표시되는 콘텐츠를 구성한다.이 파일들은 pages폴더 밑에 있긴 하지만, page의 역할을 하는 파일들은 아니다. _app.tsx와 _document.tsx 파일은 모든 페이지에 공통적으로 적용되는 로직이나 공통적으로 적용될 레이아웃을 처리하는 파일이다.
Next.js의 App 컴포넌트는 React의 App 컴포넌트와 유사하게 모든 페이지의 부모 컴포넌트 역할을 한다. 이 컴포넌트는 Next.js 애플리케이션의 최상위(root) 컴포넌트로, 모든 페이지 역할들을 하는 컴포넌트들을 감싸는 부모 컴포넌트가 되어, 공통적으로 적용되는 레이아웃이나 로직을 처리할 수 있다.
import "@/styles/globals.css";
import type {AppProps} from "next/app";
export default function App({ Component, pageProps }:AppProps) {
return <Component {...pageProps} />
}
App 컴포넌트의 주요 props
Component와 pageProps라는 두개의 props를 받고있다.
Component: 현재 렌더링될 페이지 컴포넌트를 나타낸다. 즉, 특정 경로로 이동할 때 렌더링되어야 하는 페이지가 Component로 전달된다.
pageProps: Component에게 전달될 page의 props들을 모두 객체로 보관해둔 props로, 페이지에 필요한 데이터를 담고 있다.
App 컴포넌트는 이 두 가지 props를 받아, return 문에서 현재 페이지 Component를 렌더링하고, 동시에 pageProps를 해당 페이지에 구조 분해 할당을 통해 전달하는 구조로 동작한다. (ex: <Component {...pageProps} />)
결론적으로 Next에서는 어떤 page를 rendering하던간에 App컴포넌트 밑에 page역할을 하는 컴포넌트가 렌더링 되는 구조로 렌더링 된다.
공통 요소 추가
App 컴포넌트의 return 문 안에 추가할 수 있다. 이렇게 하면 모든 페이지에 공통된 레이아웃이나 전역적인 스타일을 적용할 수 있다.return (
<>
<Header />
<Component {...pageProps} />
<Footer />
</>
)
Next.js의
App컴포넌트는 모든 페이지의 부모 컴포넌트 역할을 하며, 페이지 전역에 적용되는레이아웃이나비즈니스 로직을 처리할 수 있는 중요한 공간이다. 이를 통해 애플리케이션의 일관된 구조를 유지하고, 공통 로직을 손쉽게 관리할 수 있다.
_document.tsx 파일은 Next.js 애플리케이션에서 HTML 문서의 최상위 구조를 정의하는 역할을 한다. 이 파일은 Next.js의 모든 페이지에 공통적으로 적용되는 HTML 태그와 설정을 처리하며, React의 index.html과 유사한 역할을 한다고 볼 수 있다.
import { Html, Head, Main, NextScript } from "next/document";
import Link from "next/link";
export default function Document() {
return (
<Html lang="en">
<Head>
<Link type="image" rel="icon" href="/favicon.ico" />
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
전역적인 HTML 구조 설정: 모든 페이지에서 공통적으로 사용될 HTML 구조를 정의한다.
메타태그 설정, 폰트 불러오기, charset설정, thirdparty script를 추가하기,... 페이지 전체에 적용되는 html태그를 관리하기 위해 사용하면 된다.
_document.tsx는 모든 페이지에 공통적으로 적용될 HTML 문서의 구조를 설정하는 파일로, 메타 태그 설정, 외부 리소스 로딩, 글로벌 스크립트 등을 처리한다. 이를 통해 각 페이지마다 중복된 설정을 하지 않고, 중앙에서 전체적인 HTML 구성을 관리할 수 있다.
next.config.js 파일은 Next.js 애플리케이션의 전반적인 설정을 관리하는 파일이다. 예를 들어, reactStrictMode가 기본적으로 true로 설정되어 있는데, 이는 애플리케이션에서 잠재적인 문제를 탐지하기 위해 개발 모드에서 컴포넌트를 두 번 렌더링하는 기능이다. 디버깅 시 불편할 수 있으므로 실습 중에는 false로 변경해도 무방하다.
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
};
export default nextConfig;
Next.js의 Page Router는 파일 및 폴더 기반으로 자동으로 라우팅을 설정해 주는 매우 편리한 기능이다. 이를 통해 개발자는 별도의 설정 없이 라우팅을 구성할 수 있으며, 특히 동적 경로 설정도 간단하게 처리할 수 있다. 또한, Next.js는 개발 모드에서 핫 리로딩과 같은 개발 편의 기능을 제공하고, 배포 시 프로덕션 모드로 최적화된 애플리케이션을 구동할 수 있어 React보다 더 강력한 개발 경험을 제공함.
https://www.globhy.com/article/buying-horizontal-carbonized-bamboo-flooring-from-china-while-living-in-new-york
https://www.globhy.com/article/why-bamboo-flooring-is-the-eco-friendly-champion-of-sustainable-homes
https://www.hentai-foundry.com/user/bothbest/blogs/20350/Choosing-Bamboo-Flooring-for-My-London-Home
https://yamap.com/users/4784209
https://forum.iscev2024.ca/member.php?action=profile&uid=1357
https://my.usaflag.org/members/bothbest/profile/
https://myliveroom.com/bothbest
https://forum.geckos.ink/member.php?action=profile&uid=642
https://competitorcalendar.com/members/bothbest/profile/
https://www.fruitpickingjobs.com.au/forums/users/bothbest/
https://thefwa.com/profiles/bamboo-flooring
https://chanylib.ru/ru/forum/user/9508/
https://greenteam.app/bothbest
http://www.v0795.com/home.php?mod=space&uid=2304271
https://wearedevs.net/profile?uid=201358
https://www.templepurohit.com/forums/users/chinahousehold/
https://tutorialslink.com/member/FlooringBamboo/68089
https://www.tkaraoke.com/forums/profile/bothbest/
https://www.aipictors.com/users/bothbest
https://forum.index.hu/User/UserDescription?u=2129081
http://programujte.com/profil/75582-chinabamboo/
https://lamsn.com/home.php?mod=space&uid=1290622
https://nexusstem.co.uk/community/profile/chinabamboo/
https://brain-market.com/u/chinabamboo
https://malt-orden.info/userinfo.php?uid=414587
https://www.halaltrip.com/user/profile/255692/chinabamboo/
https://goodgame.ru/user/1698091
https://vcook.jp/users/42177
https://library.zortrax.com/members/china-bamboo/
https://aprenderfotografia.online/usuarios/chinabamboo/profile/
https://plaza.rakuten.co.jp/chinabamboo/
https://plaza.rakuten.co.jp/chinabamboo/diary/202508270000/
https://plaza.rakuten.co.jp/chinabamboo/diary/202508270001/
https://eternagame.org/players/538402
https://www.slmath.org/people/82724
https://www.aipictors.com/users/chinabambooflooring
https://vocal.media/authors/china-bamboo-bfc
https://www.giantbomb.com/profile/chinabamboo/
https://www.keedkean.com/member/44724.html?type=profile