CSR와 SSR API 요청 시 사용자에게 보여지기까지 렌더링 속도를 알아보기 위해서 작성해보았다.
클라이언트 쪽에서 렌더링이 일어난다. 사용자로부터 요청을 받으면 서버는 클라이언트에게 HTML과 JS를 보내준다. 클라이언트는 파일을 받아 렌더링을 시작한다.
*CDN: 콘텐츠 전송 네트워크(Content Delivery Network).
지리적 제약 없이 전 세계 사용자에게 빠르고 안전하게 콘텐츠를 전송할 수 있는 콘텐츠 전송 기술을 의미한다. 즉, ‘물리적’으로 가까운 서버에서 요청에 응답하는 방식이다.
ex) 사용자가 웹 사이트를 방문할 때 해당 웹 사이트 서버의 데이터는 사용자의 컴퓨터에 도달하기 위해 인터넷을 통해 이동해야 한다. 사용자가 해당 서버에서 멀리 떨어져 있는 경우 동영상 또는 웹 사이트 이미지와 같은 대용량 파일을 로드하는 데 시간이 오래 걸린다. 대신 웹 사이트 콘텐츠는 지리적으로 사용자와 가까운 CDN 서버에 저장되며 컴퓨터에 훨씬 빨리 도달할 수 있게 된다.
즉, 서버에서 처리 없이 클라이언트로 보내주기 때문에 자바스크립트가 모두 다운로드 되고, 실행이 끝나기 전까지 사용자는 볼 수 있는게 없다.
서버쪽에서 렌더링 준비를 끝마치고 클라이언트에게 전달하는 방식이다.
즉, 서버에서 이미 ‘렌더링 가능한’ 상태로 클라이언트에게 전달되기 때문에 JS가 다운로드 되는 동안 사용자는 무언가를 보고 있을 수 있다.
웹페이지 로딩의 종류는 2가지로 나눌 수 있다.
웹사이트의 가장 첫 페이지를 로딩하는 것과 나머지를 로딩하는 것.
1. 첫 페이지 로딩시간
✅ 평균적으로 SSR 이 더 빠르다.
2. 나머지 로딩시간
첫 페이지를 로딩한 후, 사이트의 다른 곳으로 이동하는 식의 동작을 가정하자.
✅ 첫 로딩 이후에는 CSR가 더 빠르다.
검색 엔진은 자동화된 로봇인 ‘크롤러’로 웹사이트들을 읽는다.
✅ SSR이 SEO에 더 최적화되어 있다.
✅ SSR이 서버 자원을 더 많이 사용한다. 매번 서버에 요청을 하기 때문.
CSR
SSR
function Posts() {
const { data: csrRequest } = useQuery('posts', getPosts);
console.log(csrRequest);
}
function Posts() {
const { data: prefetched } = useQuery('posts', getPosts);
console.log(prefetched);
}
export async function getSeverSideProps() {
const queryClient = new QueryClient();
await queryClient.prefetchQuery('posts', getPosts);
return {
props: {
dehydratedState: dehydrate(queryClient),
},
};
}
출처