React ? Next.js? - SSR과 CSR
Next.js에 대한 공부를 하기에 앞서 SSR , CSR 에 대한 공부를 다시 해봐야겠다.
렌더링이란?
서버로부터 HTML파일을 받아 브라우저 화면에 표시하고 그리는 작업을 렌더링이라고 한다.
브라우저 동작과정
- 서버로부터 데이터를 응답받아 HTML을 파싱하여 Dom 트리를 생성한다.
- Dom 트리가 구축되는동안 브라우저는 Render 트리를 구축한다.
- CSS해석하고 위치를 설정한다.
- Render 트리가 그려지고 브라우저 화면에 표시된다.
렌더링 방법 SSR, CSR
SSR(server side rendering)
SSR은 전통적인 웹 어플리케이션 렌더링 방법으로 사용자가 웹페이지에 접근할때, 서버에 페이지에대한 요청을 한다.
좀 더 쉽게 말하면, 서버에서 사용자에게 보여줄 페이지를 모두 구성하여 사용자에게 보여주는 방법.
이때 서버에서는, HTML, VIEW와 같은 자원을을 어떻게 보여줄지 해석하고 렌더링하여 사용자에게 반환한다.
브라우저 요=>청 서버 => 새로고침!
장점
- 검색엔진 최적화 가능 (SEO)
검색엔진 최적화란 무엇인가?
SEO = Search Engine Optimization 의 약어
웹페이지 검색 엔진이 자료를 수집하고, 순위를 매겨서 페이지를 구상할때 검색결과의 상위에 나올 수 있게 하는 작업
상위에 나오면? 방문자수 증가! 트래픽증가! (보통 마케팅 수단으로 이용)
- 초기 로딩 속도가 빠르다.
서버에서 이미 렌더링해서 가져오기때문이다.
하지만 클라이언트가 JS파일을 모두 파싱하고 적용하기전 까지 기능이 동작하지 않는다.
단점
- 매번 새로고침이 발생한다.
SSR은 서버에 요청을 할때 마다 새로고침이 된다.
새로고침이 된다는것은? 서버와의 잦은 응답을 말하며 서버에 부담을 주어 성능이 악화된다.
- 프로젝트 구조가 복잡해진다.
여러가지 라이브러리와 함께 사용할경우, 서버에서 데이터를 가져와 렌더링해야되는 상황이 발생한다면 프로젝트 구조가 복잡해진다.
CSR(client side rendering)
그 전에 SPA란?
SSR은 전통적인 웹 애플리케이션 렌더링 방식이였다. 그러다 기술이 더 발전되고 모바일 시대가 도래하며 모바일 환경에 최적화된 시스템이 필요해졌다.기존과 다른 방식이 필요해졌다. 그래서 등장한개념이 SPA
SPA는 최초 한번 페이지를 렌더링 한 이후부터는 데이터만 변경하여 사용하는 단일 페이지로 구성된 웹 애플리케이션이다.
SPA에서는 화면에 필요한 모든 HTML를 클라이언트측에서 가지고있다. 서버측에는 필요한 데이터를 요청하고 JSON형태로 받기 때문에 기존 어플리케이션에 비해서 화면을 구성하는 속도가 빠르다.
CSR
사용자에게 보여줄 페이지를 클라이언트에서 렌더링하는 방식.
CSR의 과정
- 처음 웹 서버에 요청할때 데이터가 없는 문서를 반환한다.
- HTML및 동적 파일들이 로드된다. 이때 데이터가 있다면 서버측에 요청을 하여 받은 후 화면에 나타낸다.
- 브라우저가 서버에 HTML및 동적 파일 요청을 한 후 로드되면, 사용자의 상호작용에 따라 자바스크립트를 통해 동적으로 렌더링을 한다.
- 필요에따라 데이터를 서버에 요청하고 받아와서 렌더링한다.
💡리액트를 사용하는 이유
리액트의 장점
CSR은 서버로부터 데이터를 받은 후 클라이언트에서 렌더링 하는 방식이다.
- 바뀐 부분만 렌더링한다.
- 컴포넌트를 나눠서 관리가 가능해진다.
- 코드의 재활용성을 높여준다.
CSR의 장점
- 트래픽감소와 빠른 인터랙션
단점
- 초기 구동속도가 느리다.
- 검색엔진최적화가 어렵다.
- 보안문제가있다.
SSR은 서버측에서 세션으로 관리하지만, CSR은 쿠키말고 관리할곳이없다.
개념 정리
SSR
서버에서 렌더링하는 전통적인 웹 렌더링 방식이다.
사용자가 웹페이지에 접근할때 서버에 페이지에 대한 요청을 한다. 서버에서 HTML , 자바스크립트 파일 등을 모두 다운로드하여
화면에 렌더링하는 방식이다.
😃 초기속도가 빠르고 SEO에 유리하다.
😂 하지만 VIEW를 변경할때 서버에 계속 요청을 보내야하므로 서버에 부담을 준다.
CSR
클라이언트에서 렌더링하는 방식으로 SPA로 클라이언트측에서 HTML 자바스크립트를 렌더링하고 동적으로 동작하면서 서버로부터 데이터만을 주고받아 클라이언트에서 렌더링을 진행하는것
😃 초기 렌더링 후 서버에 재요청을 할 필요가 없어서 클라이언트 내에서 작업하므로 빠르다.
😂 초기속도가 느리고 SEO에 불리하다.
SPA에서 SSR을 할 수 없을까? => Next.js
Next.js와 같은 리액트 라이브러리를 사용하여 구현할 수있다.
Next.js는 리액트에서 SSR을 적용할 수 있게 하는 라이브러리다!
✔️ Next.js는 아직 공부하지못한 라이브러리다. 개념부터 정리하여 다음편에서 올리겠다.