CRA란?
초기개발 환경 세팅을 말하며 아무런 초기 설정이 없어도 CRA통해 React기반의 SPA (Single Page Application:는 말 그대로 한 개의 페이지로 이루어진 어플리케이션) 사이트를 구현 할 수 있게 됐다.
Web pack, babel등 복잡한 세팅을 거치지 않아서 React기반의 웹 프로젝트 확산에 큰 기여를 하였다.
그! 런! 데! 이렇게 평화로운 곳에 한가지 큰 문제점이 발생하는데...!
CRA로 build한 프로젝트가 검색에 걸리지 않는 큰 문제점이 발생한다.
원인은 CRA는 오직 CSR(Client Side Rendering)로 실행되기 때문이었다.
그렇다면 여기에서 'CSR'이란? (SSR과 거진 반대 개념)
(* 우선, CSR에 대해서 이야기하자면 Index.html이라는 빈껍데기가 ‘똑똑'하고 있는 모습을 상상해보면서 살펴보면 더 좋다.)
웹 크롤러(검색 엔진 봇)가 각 사이트를 돌아다니며 조사하는 상황이라 가정하자.
(fyi, 웹 크롤러는 사이트의 업데이트와 생성/삭제를 계속해서 찾아보고 구글등 웹사이트의 DB 업데이트 한다.)
CSR
크롤러: 똑똑똑
크롤러: 페이지를 요청
200번대 응답을 받음
근데 ‘어랏?’ index.html 이라는 ‘빈 집’ 받음
조사를 하지 못하고 구글봇 퇴장
js파일 다운로드되며 페이지 로드
하지만 이미 크롤러는 떠났고 따라서 검색노출 안됨😩
SSR(+SSG)
크롤러: 똑똑똑
크롤러: 페이지를 요청
(사이트 주인이 웹크롤러 맞이) “안녕하세요 저희 사이트는요..!”
조사를 다 하고 구글봇 퇴장
검색 노출 성공적으로 됨😃
그렇다면 편하게 ‘CRA통해 React기반의 SPA사이트를 구현’하면서 + ‘검색에 걸리게’하려면?
그 대안으로, 첫 요청만 SSR로 보내주고 그 다음부턴 CSR로 그려주면 어떨끼?
그렇게 해서 두개를 섞어서 쓰게 되었다!
하단에 원리와 구조를 사진과 함께 이해해보자.
(원리 구조 사진 참조!)
브라우저가 페이지를 여려면 프론트 서버에 요청 보낸다
비어있는 html이 아닌 reactDOMServer로 리액트 자체에서 그린다.
html파일이 로드되었으니 이제 js가 받아져야 한다.
/
를 입력.index.js
파일을 다운로드 받음. (hydration)go to second
링크를 클릭./second
로 라우팅하고 second 페이지 코드를 생성.