getServerSideProps.
도대체 무엇인가.
공식문서를 참고해보자.
getServerSideProps
is a Next.js function that can be used to fetch data and render the contents of a page at request time.
그렇다.
getServerSideProps는 넥스트 함수로, 데이터 패칭 시 사용되며 요청된 시간에 페이지의 컨텐츠를 렌더링한다.
기본 형태는 아래와 같다.
export async function getServerSideProps(context) {
return {
props: {
data: "abc"
}, // will be passed to the page component as props
}
}
우선 getServerSideProps는 페이지 컴포넌트에서 export함으로써 사용 가능하다.
export { default as getServerSideProps } from 'lib/getServerSideProps';
아래 예제는 getServerSideProps에 있는 서드 파티 API로부터 데이터를 어떻게 패칭할 수 있는지 보여주고 있다. props를 통해 데이터를 페이지로 넘겨주고 있는 모습이다.
import type { InferGetServerSidePropsType, GetServerSideProps } from 'next'
type Repo = {
name: string
stargazers_count: number
}
export const getServerSideProps = (async () => {
// Fetch data from external API
const res = await fetch('https://api.github.com/repos/vercel/next.js')
const repo: Repo = await res.json()
// Pass data to the page via props
return { props: { repo } }
}) satisfies GetServerSideProps<{ repo: Repo }>
export default function Page({
repo,
}: InferGetServerSidePropsType<typeof getServerSideProps>) {
return (
<main>
<p>{repo.stargazers_count}</p>
</main>
)
}
❓우리는 언제 getServerSideProps를 써야할까?
getServerSideProps
는 개인화된 사용자 데이터나 요청 시에만 알 수 있는 정보에 의존하는 페이지를 렌더링해야 하는 경우 사용할 수 있다. 예를 들어 authorization header나 geolocation(위치기반)이 필요할 때!
만약 요청 할 때 데이터를 fetching할 필요가 없거나 데이터와 pre-rendering된 HTML을 캐시하려는 경우에는 getStaticProps
를 사용하는 것이 좋다.
❓우리는 왜 getServerSideProps를 써야할까?
export const getServerSideProps = async () => {
try {
// 유저 정보 데이터를 패칭해오는 api
const res = await fetch('https://....');
if (res.status === 200) {
const user = await res.json();
return { props: { user }}
}
return { props: {} };
} catch (error) {
console.log(error);
return { props: {} }
}
❓getServerSideProps는 언제 실행될까?
이 친구는 오직 서버사이드에서만 실행되고 브라우저에서는 실행되지 않는다고 한다.
next/link
나 next/router
와 같은 클라이언트 사이드 페이지 이동을 통해 요청했을 경우‼️여기서 잠깐!
함께 자주 언급되는 getStaticProps
는 무엇일까?
그렇다고 한다.
흠..
결론적으로 getServerSideProps는 pre-fetch를 원할 때 사용하면 된다.
예시로, getServerSideProps를 통해 사용자의 데이터(로그인 관련(에 해당하는 session같은 것들을 pre-fetch로 전달할 수 있다.
export { default as getServerSideProps } from 'lib/getServerSideProps';
Next.js는 배워도 배워도 어려운 것 같다. 흑흑
넥스트를 접한 지 이제 4개월이 되어가는데, getInitialProps
와 getServerSideProps
에 대해서 거의 몰랐던 상태라 또한번 공식문서의 중요성을 깨달았다.. 👿
아래는 참고하면 좋을 링크!
getInitialProps vs getServerProps · vercel next.js · Discussion #11211
배가 너무 고프다..