Next.js가 제공하는 데이터 패칭방법은 다음과 같이 4가지로 정리할 수 있다.
SSR 방식으로 데이터패칭을 할때는 getServerSideProps
함수를 통해 가능하며, Next.js의 공식문서에서 설명하는 개념은 다음과 같다.
If you export a function called getServerSideProps (Server-Side Rendering) from a page, Next.js will pre-render this page on each request using the data returned by getServerSideProps
CSR 방식은 말그대로 클라이언트단에서 처리를 하는 방식으로, 따로 함수를 두고 있지는 않다.
정적인 사이트를 생성하는 경우에 사용되며, getStaticProps
함수를 이용한다. Next.js의 공식문서에서 설명하는 개념은 다음과 같다.
If you export a function called getStaticProps (Static Site Generation) from a page, Next.js will pre-render this page at build time using the props returned by getStaticProps.
Next.js 는 모든 페이지를 프리렌더링(Pre-rendering)한다.
(프리렌더 후 리액트 하이드레이션 일어남)
프리렌더를 통해 넥스트는 SEO 관리가 가능하다.
(클라이언트처럼 동작하지 않는 검색엔진의 경우 아무런 데이터를 조회해 갈 수 없으므로)
Next.js 의 프리렌더링 방식은 다음과 같이 나눌 수 있다.
- SSG :
빌드
타임에 프리렌더- SSR :
요청
타임에 프리렌더
Next.js는 위 두가지 방식 중 SSG
를 쓰라고 적극 권장한다고 한다. SSG에 대해 좀 더 살펴보면, 다음과 같이 2가지 케이스
로 나누어 볼 수 있다.
- Page의 내용물이 외부 데이터에 의존적일때
→getStaticProps
만 가지고도 가능
- Page Paths까지 외부 데이터에 의존적인 상황
→getStaticPaths
도 함께 활용해야 가능
_app.js
(모든페이지를 품을 수 있는 코드, 넥스트에서 자체적으로 제공하는 기능)에 모든 컴포넌트를 감싸는 레이아웃컴포넌트를 불러와서 사용getLayout
함수 이용하여 복잡한 중첩 레이아웃 구성 가능Next.js에서 설명하는 getLayout 함수는 다음과 같다.
If you need multiple layouts, you can add a property getLayout to your page, allowing you to return a React component for the layout. This allows you to define the layout on a per-page basis. Since we're returning a function, we can have complex nested layouts if desired.
기본적인 레이아웃 이외에 중첩 레이아웃을 구성할 경우 예시는 다음과 같다.
//subLayout을 적용할 컴포넌트
컴포넌트명.getLayout = function getLayout(page){
return (
<Layout>
<SubLayout>{page}</SubLayout>
</Layout>
)
}
먼저 중첩 레이아웃을 설정하고싶은 페이지의 컴포넌트에서 getLayout
함수를 호출하여 중첩 레이아웃을 리턴해준다.
그리고 _app.js
파일에서 getLayout
함수가 있는 경우, 없는 경우를 체크하는 getLayout을 선언해준다. (네이밍은 자유롭게 해도 상관없다.)
// _app.js파일
const getLayout= Component.getLayout ||((page)=> <Layout>{page}</Layout>
// getLayout이 있다면 그걸 실행하고, 없다면 레이아웃을 불러온다.
return getLayout({<Component {..pageProps} />)