해당 글에서는 동일한 페이지에서, 주소 입력으로 바로 가는 경우에는 SSR을 적용하고 다른 페이지에서 타고 들어가는 경우에는 CSR을 적용하는 방법을 설명합니다.
핵심은 getServerSideProps
, getStaticProps
와 같이 서버 단에서 실행되는 함수들에서 분기를 어떻게 하느냐입니다.
export async function getServerSideProps({
req: { url }
}: GetServerSidePropsContext) {
const isClient = isClientReq(url)
// CSR인 경우
if (isClient) {
return {
props: {
...
},
}
}
// SSR인 경우
...
}
export const isClientReq = (
url: string | undefined
) => url?.startsWith('/_next')
getServerSideProps
를 예로 들겠습니다.
이 메서드에서는 GetServerSidePropsContext
라는 인터페이스를 가지는 context
라는 객체를 매개변수로 갖습니다.
여기서, req
에서 url
을 가져올 수 있는데 CSR인 경우에는 내부적으로 /_next
라는 주소가 앞에 붙습니다.
그래서 이것을 기준으로 CSR인지, SSR인지 구분할 수 있게 되므로 위와 같이 isClientReq
라는 함수를 만들 수 있게 됩니다.
req?.url?.startsWith('/_next')
기준으로 CSR인지 SSR인지 구분할 수 있게 됩니다.