CSR은 서버로부터 받은 HTML, CSS, Javascript파일을 browser side에서 렌더링하는 방식입니다. React나 Angular등 modern frontend frameworks로 만들어진 어플리케이션이 이 방식을 사용합니다.
유저가 브라우저에 www.naver.com(예시)를 입력하면, 서버는 빈HTML파일을 유저에게 보내면서 CSS, Javascript 등 렌더링에 필요한 파일을 함께 보냅니다.
모든 자바스크립트 파일이 다운로드 될 때까지 유저는 빈 화면을 보게 됩니다. 자바스크립트 다운로드가 완료되면, 모두 컴파일 됩니다.
그 이후 API 등 디스플레이에 필요한 추가 데이터들을 호출하고, 동적 웹페이지를 완성합니다.
유저가 서버로 요청을 보내면, server는 데이터까지 모두 포함하여 HTML을 구성한 후 이를 client로 보냅니다.
HTML파일을 받지만 자바스크립트가 실행되기 전으로 유저는 interaction이 불가능한 웹사이트를 보게 됩니다.
브라우저가 자바스크립트 파일을 다운로드 받아 실행합니다.
유저가 이용할 수 있는 웹사이트가 됩니다.
CSR은 초기 로딩 속도가 느리고 SEO에 취약하다는 단점이 있습니다. SSR은 불필요한 렌더링이 된다는 장점이 있습니다.
이 두가지 단점을 해결하고 두 방식의 장점을 살리기 위해 등장한 것이 Next.js입니다.
Next.js는 첫 로딩시 server에서 데이터가 채워진 html을 렌더링해 client로 보내 SEO 최적화를 해결하고, 첫 로딩 이후에는 필요한 부분만 re-rendering하는 CSR방식을 이용해 서버 부하를 줄이도록 했습니다.
참고사이트:
https://reactjs.org/docs/create-a-new-react-app.html#nextjs
https://nextjs.org/learn/basics/create-nextjs-app
https://www.blog.duomly.com/client-side-rendering-vs-server-side-rendering-vs-prerendering/