먼저 이 개념을 이해하기 전 "Web"에대한 기본적인 지식이 필요하다.
1, 2, 3세대와 Modern Web까지의 흐름을 간단하게 살펴보자.
System architecture
가 발전했다.CSR은 Client Side Render라는 뜻으로 Cleint측에서 RENDERING 되는 형식이다.
여기서 또 하나 필요한 개념으로 CRA가 있다.
CRA (Create React App)
완전 Front 영역. 나는 아무것도 알지 못한다. 그치만 개념은 이해할수 있지. 나는 지성인이니까
"아무런 초기 설정이 없어도 CRA를 통해 React 기반의 SPA 사이트를 구현할 수 있다."
즉, React를 통해 app을 만듬으로써 초기설정 없이 빠르게 결과물을 만들어낼수 있다는 개념이다.
그러나 CRA 방식으로 build한 프로젝트는 검색에 잘 걸리지 않는다
그 이유는 CRA를 통해 만들어진 project는 오직 CSR(Client Side Render)로 실행되기 때문이다.
CSR방식에서 구글봇의 작동법
말그래도 Cleint 측에서 rendering이 됨을 듯한다.
웹 페이지에 접속하면 HTML, JS, CSS확장자의 file이 차례로 응답된다.
- 제일 먼저 응답된 HTML 파일에 의해서 내용이 비어있는 웹 페이지가 형성된다. (안에 data 없음)
- 🔥 구글로 예를들면 구글봇이 웹 페이지를 분석해 해당 페이지의 data정보를 알아낸다. BUT 내용없음! 정보 획득 X
- 이후 응답된 JS 파일의 다운로드가 완료되고 JS 파일이 dom을 비어있는 HTML에 그려진다 (RENDERING)
- 이미 구글봇은 떠난 후..
CSR을 사용함으로써 장점도 있다.
SEO란 웹 페이지 검색엔진이 자료를 수집하고 순위를 매기는 방식에 맞게 웹 페이지를 구성해서 검색 결과의 상위에 나올수 있도록 하는 작업을 말한다.
출처 : wikipedia
커머스 사이트와 같은 "검색"이 곧 매출과 직결되는 사업분야의 경우 SEO 성능이 매우매우 중요하다!
이와 달리 SSR은 Server Side Render라는 뜻으로 Server에서 RENDERING이 되어 응답을 보내는 형식이다.
SSR방식에서 구글봇의 작동법
이미 Rendering이 되어 FE에 보내지는것!
- 응답된 HTML파일에 Rendering된 JS의 내용이 채워진 채 웹 페이지가 형성된다.
- 🔥 구글봇이 해당 웹 페이지에 존재하는 data의 정보를 수집한다. => 검색에 걸리는 효과!
SSR이 나오게 된 계기는 "SPA의 형식을 지키면서도 검색에 자주 노출되게 하기 위한 방법"을 찾았던 점이다. 즉, SPA도 챙기면서 SEO까지 챙기기 위한 방법으로 나온것이 SSR 방식이다.
위에서 말했듯 CSR방식에 비해 SEO 측면에서 유리하다
=> 검색엔진에게 보여줄 data를 마련할 수 있다.
또한 전체적으로 사용자에게 보여주는 콘텐츠 구성이 완료
되는 시점이 더 빠르다. 비록 CSR방식에 비해 페이지를 구성하는 속도는 느려지지만 !
Server 측에서 rendering되어 data가 전해지기 때문에 페이지를 잘못 구성할 경우 CSR에 비해 서버 부하가 더 크고, 때문에 첫 로딩이 매우 느려질 수 있다
MPA란 Multi Page Application이라는 뜻으로 말그대로 "여러장의 페이지"로 구성된 application을 뜻한다.
현재 우리가 사용하고 있는 "사이트"하나를 생각해보면 해당 사이트가 "한 페이지"로 구성된건 아니라고 생각한다! (당장 구글만 봐도 검색창, 검색 후 창 등.. 페이지가 진짜 많아 보인다)
하지만 이러한 구성이 모두 MPA인것은 아니다. 이후에 나올 SPA에서 다루도록 한다.
다시 MPA로 돌아가서 말하면 MPA는 정적 웹사이트로 구현된 HTML 파일이 여러개 존재하고, 페이지간 이동하면서 화면이 깜빡이는걸 볼 수 있다. (서로 다른 HTML 파일로 이동됨)
SPA란 Single Page Application이라는 뜻으로 "하나의 페이지"로 구성된 application을 뜻한다.
즉, 하나의 HTML 파일로 구성되어 있다는 뜻.
그렇다면 우리가 보는 "페이지 간의 이동"은 어떻게 SPA로 설명할까??
바로 JS에서 HTML 태그를 생성해 내기 때문에 SPA구조가 될수 있기 때문이다.
즉, 페이지를 이동하게 되면 기존에 있던 HTML 파일에 JS의 특정함수로 생성된 새로운 HTML 태그들로 채워진다는 것이다.
때문에 페이지간 이동시 화면이 깜빡이지 않는다.
그렇다면 현재 웹 기준으로 네가지의 관계성은??
현재웹 기준으로 한다면 SSR은 SPA로 구성된 SSR방식을 뜻하며, 이에 따라 SPA형식의 결과물은 CSR과 SSR방식으로 나뉜다!
가능하다! 효율이 더욱 높아지는 방법인데 이를 위한 모듈 하나 없을까. 바로 "Next.js"와 같은 훌륭한 framework들이 이미 존재한다.
더 자세한 개념은 지금상태보다 더 깊은 FE지식을 요하기 때문에 일단 "가능하다"라는 것!!
자투리 정보 : hydration
hydration이란 **Server에서 전송한 `정적 문서`를 데이터 변경에 반응할 수있는 `동적 형태`로 변환하는 _클라이언트 측 프로세스_**를 뜻한다.
이는 render와 동일하지만, dom이 이미 그려져 있는 상태이기 때문에 event listener만 부착하는 식으로 작동한다.
BE로 공부하고 있는 지금 React나 dom에 대한 개념은 잘 모르지만 SSR과 CSR에 따른 SEO효율의 차이와 기존의 문제점을 극복하기 위해 현재 사용하는 방식 (SSR + CSR)에 대해서 알수 있었다.! 🥰