Next.js는 모든 페이지를 사전 렌더링(pre-rendering)을 하는데
description
, keywords
, author
, subject
, classification
등의 정보를 표기할 수 있으며, 검색엔진은 이런 정보를 적극적으로 활용한다.pre-rendering: 미리 HTML들을 만들어 두는 것?!
📌 정적 생성과 SSR의 차이점은, 언제
HTML
을 생성하는가?
- 유저가 요청하기 전에 미리 페이지를 만들어도 상관없다면 정적 생성을 적용
- 예시) 마케팅 페이지, 블로그 게시물, 도움말 문서 등
HTML
파일들이 생성됨HTML
을) 모든 요청에 재사용Next.js
는 정적 생성을 권고getStaticProps
/ getStaticPaths
next.js는 자주 사용하는, 서버에서 렌더링 할 필요가 없는
에러 페이지인 404, 500 페이지를 기본적으로 제공한다
하지만 디자인 또는 정보를 추가하고 싶을 경우 수정 가능하다
404.ts
파일 생성import type { NextPage } from 'next';
import { Icon } from 'semantic-ui-react';
import styled from 'styled-components';
const Error404: NextPage = () => {
return (
<ErrorWrap>
<img alt='logo' src='/images/web_logo.png' />
<Icon name='warning circle' color='red' />
404: 페이지를 찾을 수 없습니다!
</ErrorWrap>
);
};
export default Error404;
_error.ts
파일 생성npm build && npm start
function Error({ statusCode }) {
return (
<p>
{statusCode
? `An error ${statusCode} occurred on server`
: 'An error occurred on client'}
</p>
)
}
Error.getInitialProps = ({ res, err }) => {
const statusCode = res ? res.statusCode : err ? err.statusCode : 404
return { statusCode }
}
export default Error
HTML
을 생성(되기 때문에 퍼포먼스가 떨어질 순 있다)getServerSideProps
import type { NextPage } from 'next';
import Head from 'next/head';
import { getProduct } from '../api/api';
const ProductItem: NextPage = ({ item }: any) => {
return (
item && (
<>
<Head>
<title>{item.name}</title>
<meta name='descriprion' content={item?.description} />
</Head>
// ... 생략
</>
)
);
};
export default ProductItem;
export async function getServerSideProps(context: any) {
const id = context?.params.id;
const data = await getProduct(Number(id));
return {
// ProductItem 컴포넌트의 props로 전달된다
props: {
item: data,
},
};
}