export async function getServerSideProps() {
console.log("server");
// 객체 형식으로 props를 꼭 return 시켜줘야한다
// 컴포넌트로 props를 전달
return {
props: { time: new Date().toISOString() },
};
}
정적인 사이드를 생성한다
생성한다: 데이터를 가져와서 그려둔다
정적인 사이트를 생성한다: 정적인 사이트 데이터를 가져와서 그려둔다
개발환경에서는 SSG가 제대로 동작하지 않는다.(개발환경에선 SSG가 꼭 SSR 처럼 동작한다)
SSG가 동작하는걸 보려면 build를 해야한다.
export async function getStaticProps() {
console.log("server");
// 객체 형식으로 props를 꼭 return 시켜줘야한다
// 컴포넌트로 props를 전달
return {
props: { time: new Date().toISOString() },
};
}* SSG는 build되는 시점에서 데이터를 가져와서 정적 사이트를 만들어논다
SSR과의 차이첨은 SSR은 페이지 접근시마다 데이터를 가져와서 그리지만 SSG는 build되는 시점에서만 데이터를 가져와서 정적 페이지를 구성한다
정적인 사이트를 구성할때 좋다(서버 부하를 줄일수있음) ex: 블로그, 안내페이지...
getStaticPaths
// dynamic route 사용시 정적으로 생성할 Paths를 getStaticPsops에 전달한다.
export async function getStaticPaths() {
// 예시
const post = await fetch("https://www.exmple.con/posr")
const res = JSON.stringify(post)
const paths = res.map(itm => ({
params: { id: itm.id }
})
// paths(required) Array
// falback(required)
return {
/*
/post/[id].ts 경로일경우 params객체에 꼭 id parameter 가 필수로 있어야한다
/post/[...slug].ts 경로일경우 params객체에 꼭 slug배열이 필수로 있어여한다
*/
paths,
/*
-----------------------------------------------------------
빌드 타임에 생성해놓지 않은 path로 요청이 들어온 경우 어떻게 할지
정하는 boolean 또는 'blocking' 값이다
- false 인 경우
getStaticPaths가 반환하지 않은 모든 path에 대해서 404 페이지 반환
*사용 예시
- 적은 path만 사용할 경우
- 새로 페이지가 추가 될 일이 적을 경우
- 새로운 페이지 자주 추가시 추가될때마다 다시 빌드해야함
- true 인 경우
정해지지 않은 path에 대해서 404페이지를 반환하지 않고 요청이 들어올시 첫 요청에서만
getStaticProps를 호출하여 미리 정의되어있는 path 리스트에 추가하고
페이지가 랜더 되기전까지 fallback loading 화면을 띄우고 페이지를 랜더
시킨다
* "fallback" loading 화면은 router.isFallback 체크를 통해
화면을 지정 할 수 있다 !지정하지 않으면 빌드시 에러발생
ex) if(router.isFallback) {
return <div> Loading... </div>
}
- blocking 인 경우
true일 때와 비슷하지만 페이지 생성중에 사용자에게 fallback 화면을 보여주지 않는다
SSR 처럼 동작해서 아무것도 미리 보여주지 않음
fallback 화면을 정의해주지 않아도 된다
*/
falback:'false'
}
}
증분 정적 사이트를 재생성 한다
재생성한다: (특정주기로) 데이터를 가져와서 다시 그려둔다
증분 정적 사이트를 재생성한다: (특정 주기로) 정적인 사이트 데이터를 가져와서 다시 그려둔다
export async function getStaticProps() {
console.log("server");
return {
props: { time: new Date().toISOString() },
// revalidate 특정주기(몇초마다 데이터를 다시 그릴레)
revalidate: 1,
};
}
Pre-rendering과 SEO의 상관관계
Next.js 의 Pre-rendering 방식 ?
SSG(recommended) & SSR
Next.js 에서는 SSG를 적극 권장 이유는 SSG는 빌드 타입에 pre-render 하기 때문에
서버에 부하가 덜 하다.
SSG는 빌드 타임에 pre-render
SSR은 요청 타임에 pre-render
SSG 2가지 상황
getServerSideProps / getStaticProps 등을 다시 실행시키지 않고,
현재 상태를 잃지 않고 url을 바꾸는 방법
url을 바꾸는 3가지 방식
Router의 slug 기능을 똑같이 사용할 수 있다.