Data Fetching
- Static Generation : 미리 모든 데이터를 준비한 후 정적 페이지로 만들어 이를 파일단위로 serve
- Server-side Rendering : 페이지를 서버에서 생산하여 내려주는 방식 > node-server
getStaticProps(Static Generation)
- 빌드 시 고정되는 값 >> 빌드 이후 변경 불가
- 프로젝트가 빌드될 때 데이터를 가져온다.
function Blog({ posts }) {
return (
<ul>
{posts.map(post => (
<li>{post.title}</li>
))}
</ul>
);
}
export async function getStaticProps() {
const res = await fetch("https://.../posts");
const posts = await res.json();
return {
props: {
posts
}
};
}
export default Blog;
- async 함수를 통해 export 하게 되면 반환된 속성 값을 이용하여 사전 렌더링을 진행한다.
getStaticProps 반환값
- props
- revailidate : 페이지 재생성이 발생할 수 있는 초
- notFound(boolean) : 404 상태와 페이지를 리턴할지 결정
- redirect : 리다이렉트 값이 들어 있는 객체,
redirect
는 { destination : string , permanent: boolean }
형태의 객체이다
언제 사용할까?
- 렌더링에 필요한 데이터가 빌드 시 사용자의 요청보다 먼저 사용 가능할 때
- 공통으로 캐시될 수 있는 데이터를 사용할 때
- SEO를 위해 사전 렌더링 또는 빠른 로딩을 원할 때
(getStaticProps로 생성된 HTML 파일과 JSON파일은 CDN에 캐시됨)
getStaticPatchs(Static Generation)
- 빌드 시 정적으로 렌더링할 경로 설정
- 이곳에 정의하지 않은 하위 경로는 접근해도 페이지가 뜨지않음
- 데이터를 기반으로 동적 라우트를 지정한다.
export async function getStaticPaths() {
return {
paths: [
{ params: { dynamic: 1 } },
{ params: { dynmic: 2 } }
......
{ params: { dynmic: 동적인값 } }
],
fallback: true,
}
}
getServerSideProps(Server-side Rendering)
- 각 요청이 있을 때마다 데이터를 가져온다.
- 런타임 환경에서 페이지에 접근 시 서버 측에서 실행.
function Page({data}) {
...
}
export async function getServerSideProps(context) {
const res = await fetch("https://.../posts");
const posts = await res.json();
return {
props: {data},
}
}
언제 사용할까?
- 미리 데이터를 요청하여 페이지에 렌더링 할 경우 사용.
(페이지에 접근할 때마다 실행되기 때문에 getStaticProps보다 속도가 느리고 추가 구성없이 결과 데이터를 캐싱할 수 없다.)