간단하게 비유하면 "비조리형 배달음식"으로 볼 수 있다.
식당에서 재료만 손질해서 전달 주면 고객이(client) 알아서 음식을 완성해서 식사하는게 최종 형태를 브라우저에서 완성하는 CSR과 비슷하다고 할 수 있다.
조금 더 사전적으로 정의하여보면, "웹 페이지의 렌더링이 클라이언트 측에서 이루어지는 것"을 의미한다.
브라우저가 최초로 서버에 Request를 보내면, html, css, js파일을 차례로 다운로드 한다.
React를 사용하여 페이지를 구현하였을 경우, html만 받아졌을 때는 페이지가 비어져있다가 javascript가 모두 다운로드 완료되어야 그제서야 화면에 컨텐츠가 그려진다.
우리가 React를 CRA를 사용해서 생성할 경우 렌더링이 CSR방식으로 일어나게 된다.
CSR과 반대로 "완조리형 배달음식"을 떠올리면 된다.
식당에서 음식을 완성해서 배달하면 고객은 먹기만 하면 되는거다.
일일이 조리를 다 해야하기에 주방이(서버가) 바쁘다는 특징이 있다.
이것도 사전적으로 정의해보면, "첫 페이지 렌더링을 클라이언트가 아닌 서버에서 진행하는 것"이라고 볼 수 있다.
서버에서 먼저 HTML,CSS를 렌더링 해서 정적인 화면을 먼저 client측에 전달해주고 나중에 동적인 요소가 필요한 경우에 client로 JS를 가져와서 활용하는 형태이다.
SEO 최적화를 이루어내면서 동시에 SPA를 활용하여 쾌적한 사용환경을 만들 수 없을지 여러 사람들이 고민하였고, 그 결과로 SPA for SSR이 등장하게 되었다.
그 방법인 즉슨 1. 첫 렌더는 SSR방식으로 진행하고, 2. 두번째 렌더부터는 CSR로 진행하는 것이다.
SSR로 렌더링 된 화면(기존 마크업)에 이벤트 리스너를 연결시킨다.
기존에 CSR로 작업할떄는 render
콜백을 사용하였지만, SSR로 작업 시 HTML과 React를 연결하려면 hydrate
를 사용해야한다.
// csr
ReactDOM.render(element, container[, callback])
// ssr
ReactDOM.hydrate(element, container[, callback])
Next.js는 React의 SSR을 쉽게 구현할 수 있도록 해주는 프레임워크이다.
사용 방법이 간단하기에 FE 개발자가 Next.js를 활용하여 SSR 구축을 용이하게 만들어, FE-BE간 업무를 보다 깔끔하게 분리되도록 한다.