https://nextjs.org/docs/basic-features/pages#server-side-rendering
공식문서 번역하면서 공부해보기
for study ! :)
1번 케이스 : 페이지의 컨텐츠가 외부데이터에 의존할때
export default function Blog({ posts }) {
return (
<ul>
{posts.map((post) => (
<li>{post.title}</li>
))}
</ul>
)
}
사전렌더링안에서 데이터를 fetch할때 ,
- Next.js는 같은 파일 안에서 비동기함수 getStaticProps 를 export하게 한다.
- 이 함수는 빌드할때 호출되어지고, fetch된 data를 사전렌더링할때 page의 props로 전달해준다.
export default function Blog({ posts }) {
// 포스트들을 렌더링하는 로직
}
// 이 함수들은 빌드할때 호출되어집니다
export async function getStaticProps() {
// 포스트들을 가져오기 위해서 외부 API를 호출한다.
const res = await fetch('https://.../posts')
const posts = await res.json()
// Blog 컴포넌트인 { props: { posts } }를 리턴합니다.
// 빌드할때 'posts'라는 이름으로 propt들을 받을 수 있다.
return {
props: {
posts,
},
}
}
2번 케이스 : 페이지의 경로가 외부데이터에 의존할때
Next.js는 다이나믹 라우트로 페이지를 만든다.
파일을 pages/posts/[id].js 경로로 id에 따라 각각의 페이지를 만들 수 있다.
그러나 빌드시 pre-render되는 id는 외부 데이터에 의존적인것이다.
예를 들어 : DB에 id가 1인 하나의 게시글을 추가했다고 가정하면,
빌드할때 posts/1만 pre-render하면된다.
나중에 id가 2인 두번째 게시글을 추가한다면, posts/2 또한 사전렌더링될것입니당
- 그래서 pre-render된 페이지 경로들은 외부데이터에 의존적인것이고,
- 이걸 다루기 위해서 Next.js는 getStaticPaths라고 불리는 비동기 함수를 export하게 합니당
- 이 함수는 빌드할때 호출되고, pre-render를 원하는 경로들을 지정해줍니다!
export async function getStaticPaths() {
// 포스트들을 가져오기 위해 외부 API를 호출한다.
const res = await fetch('https://.../posts')
const posts = await res.json()
// posts들에 의존하는 pre-render하기 원하는 경로들을 가져온다.
const paths = posts.map((post) => ({
params: { id: post.id },
}))
// 이 경로들은 빌드할때만 pre-render될것이다.
// { fallback: false }는 다른 경로들은 404Error가 될것을 의미함.
return { paths, fallback: false }
}
언제 Static Generation을 사용해야할까?
페이지가 한번 빌드되고, CDN에 의해 serve되기 위해서
가능하다면 Static Generation을 사용하는걸 추천한당
매번 요청들로 서버렌더링을 할때보다 더 빨라질거거든 ~
Static Generation을 이용하는 많은 경우들
- 마케팅 페이지
- 블로그 포스트들과 포트폴리오들
- 이커머스 상품리스트들
- 도움말과 문서들
만약에 내가 유저들의 요청보다 앞서서 pre-render해야한다면
Static Generation을 선택하쉬라
반면에 Static Generation은 좋은 선택이 아닐때는:
만약에 유저들의 요청에 앞서서 pre-render를 할 수 없을때인데,
빈번하게 data들이 업데이트 되고, 매번 요청이 있어서 페이지컨텐츠가변경될때이다.
이럴 경우에는
- Static Generation을 Client-side에서 data를 fetch해서 같이 사용해라
- client-side js로 pre-rendering을 피할수 있다.
- SSR을 사용해라
SSR
만약에 페이지가 SSR을 이용하고 있다면 page HTML은 매 요청마다 만들어질것이당
SSR을 이용하기 위해서 getServerSideProps라는 비동기 함수를 export해야한다.
이 함수는 매 요청마다 호출될것이다.
예를 들어 페이지가 빈번하게 업데이트되는 데이터들로 pre-render되어야한다고 가정한다.
그럴땐 getServerSideProps를 사용해서 data들을 fetch하고 Page컴포넌트에 전달해준다.
export default function Page({ data }) {
// data들을 렌더링한다.
}
// 이 함수는 요청할때마다 호출될것이다.
export async function getServerSideProps() {
// Fetch data from external API
const res = await fetch(`https://.../data`)
const data = await res.json()
// prop를 통해 page에 data를 전달한다.
return { props: { data } }
}
getServerSideProps 는 getStaticProps 와 비슷해보이지만 차이점이 있다.
- getServerSideProps는 빌드할때가 아니라 요청할때마다 실행된다.
혼자 공부하면서 번역한거라 틀릴가능성 높음
틀리면 알려주세요🥺
'Frontend > Next.js' 카테고리의 다른 글
4. getServerSideProps (3) | 2023.02.16 |
---|---|
2. Next.js pages 정리 | 공식문서 번역하면서 읽기 (0) | 2023.02.15 |
1. Next.js 시작하기 (0) | 2023.02.15 |
Next.js에서 페이지이동이 필요할때 | (0) | 2023.02.04 |
_app.tsx , _document.tsx 차이를 알아보자 (0) | 2023.01.27 |