리액트를 기반으로 만들어진 프레임워크
app
폴더 아래의 폴더명을 기반으로 자동 라우팅이 된다pages
폴더에 원하는 페이지의 파일 이름을 두고 Router를 설정해준다브라우저에서 Javascript를 이용해 동적으로 페이지를 렌더링 하는 방식
빌드 시점에 모든 페이지를 미리 생성하여 서버 부하를 줄이는 방식으로 클라이언트의 요청 시 렌더링 된다
서버에서 페이지를 렌더링하여 클라이언트에게 HTML을 전달하는 방식이다
최초 빌드를 할 때만 생성된다
사전에 미리 정적 페이지를 여러개 만들어 놓음 ➡️ 클라이언트가 홈페이지를 요청하면 서버에서는 이미 만들어져 있는 사이트를 바로 제공
정적인 데이터만 사용할 수 있다
사용자와의 상호작용이 서버와의 통신에 의존하므로, CSR보다 상호작용이 느릴 수 있고 서버 부하가 클 수 있다
마이페이지 처럼 데이터에 의존하여 화면을 그려주는 경우 사용이 불가능하다
SSG처럼 정적 페이지를 제공한다
정적 페이지를 먼저 보여주고, 필요에 따라 서버에서 페이지를 재생성 하는 방식으로 설정한 주기만큼 페이지를 생성할 수 있다
10분 주기 ➡️ 10분 마다 DB 또는 외부 영향 때문에 변경된 사항을 반영
npx create-next-app@latest
명령어로 설치build
를 선행으로 실행하지 않으면 에러가 발생한다src>app 폴더 밑에 test 폴더를 새로 만들고 그 안에 page.tsx 파일을 만든다
브라우저에서 localhost:3000/test
로 접근하면 test폴더 안에 page.tsx
에 작성한 내용이 나온다
폴더 이름을 대괄호로 감싸준다
posts/1
posts/2
등 경로에 대해 동적으로 페이지를 생성하게 된다
app/posts/[id]/page.tsx
브라우저에서 localhost:3000/posts/123
로 접근 시 [id] 폴더 안에 page.tsx
에 작성한 내용이 나온다
라우팅에 포함되지 않는 폴더를 만들고 싶을 경우 파일을 ( )로 감싸준다
app/(admin)/about/page.tsx
브라우저에서 localhost:3000/about
로 접근하면 about폴더 안에 page.tsx
에 작성한 내용이 나온다
브라우저에서 localhost:3000/admin/about
로 접근하면 404에러가 발생한다
layout
파일은 어떤 segment
와 그의 자식 node
에 있는 요소들이 공통적으로 적용받게 할 UI를 정의한다
❗️자식 node
에 있는 요소들이 공통 적용을 받아야 하기 때문에 반드시 children
prop이 존재해야 한다
❗️동일 layout
안에서 다른 경로를 이동 할 때 리렌더링이 일어나지 않는다
root 경로에 존재하는 layout.tsx
브라우저에서 어떤 경로에 접속하든 공통 레이아웃이 적용된다
layout과 상당히 유사한 컴포넌트로 layout은 다른 경로로 이동 할 때 리렌더링이 일어나지 않지만 template는 리렌더링이 발생한다
template.tsx
로 지정하여 사용할 수 있다
next.js에서는 별도의 404 not found 페이지를 세팅하지 않아도 기본적으로 제공해준다
app/not-found.tsx 로 직접 만들 수 있다
다른 경로로 접근 시 not-found.jsx의 내용을 보여준다
next에서 제공하는 Metadata를 활용 할 수 있다
localhost:3000/
에 접근하면 적용된 것을 확인할 수 있다