AJAX가 등장하면서 전통적으로 MPA 디자인 패턴을 따르던 개발 방식에 변화가 생겼다.
클라이언트에서 데이터를 요청할 때 새 HTML 페이지를 받지 않고 데이터를 갱신할 수 있게 됐다.
SPA는 웹 페이지에서 처음 응답받을 때 딱 한 번만 HTML, CSS, 자바스크립트 같은 자원을 내려받고 다음 요청부터는 응답받은 데이터로 필요한 부분만 변경한다.
응답 데이터는 XML, CSV, HTML 등의 형식으로 받을 수 있는데, JSON 데이터를 가장 많이 사용한다.
SPA는 클라이언트의 요청으로 응답받은 데이터를 웹 페이지에서 직접 변경한다.
소스 코드를 읽어 웹 브라우저에 보이게 그래픽 형태로 출력하는 과정, 즉 렌더링을 클라이언트에서 하는 것이다.
그래서 SPA를 CSR(Client Side Rendering)이라고도 한다.
앵귤러, 리액트, 뷰는 모두 SPA 디자인 패턴을 기반으로 한다.
SSR은 SPA의 검색 엔진 최적화 불리함의 문제를 해결한 것으로, 웹 페이지를 서버에서 렌더링한다.
사용자에게 데이터를 전달해 클라이언트에서 업데이트하는 SPA 디자인 패턴과 달리 모든 데이터를 서버에서 생성한다.
클라이언트에서 필요한 페이지들을 사전에 미리 준비해뒀다가 요청을 받으면 이미 완성된 파일을 단순히 반환하여 브라우저에서 뷰를 보여지게 된다.
서버에서 요청할 때 즉시만드느냐 혹은 미리 만들어 놓느냐에 따라 차이가 있다.
SSR은 요청시 서버에서 즉시 HTML을 만들어서 응답하기 때문에 데이터가 달라져서 미리 만들어 두기 어려운 페이지에 적합하다.
반면 SSG 미리 다 만들어두고 요청시에 해당 페이지를 응답하기 때문에 바뀔일이 거의없어서 캐싱해두면 좋은 페이지에 사용된다.
용도는 서비스 성격에 따라 달라진다.
유저랑 상호작용이 많고 고객의 개인정보로 기준으로 이루어지는 서비스라면 검색엔진 노출보다 고객의 데이터를 보호하는 것이 더 중요할 수 있다 -> CSR
회사홈페이지이기 때문에 상위노출이 필요하고 누구에게나 항상 같은 내용을 보여줘야하며 매주 업데이트 되어야한다면 ->SSR
회사홈페이지이기 때문에 상위노출이 필요하고 누구에게나 항상 같은 내용을 보여줘야 하지만 업데이트를 거의 하지 않아도 된다면 -> SSG
만약 사용자에 따라 페이지 내용이 달라지며 화면깜빡임 없는 빠른 인터렉션이 중요하고 상위노출이 필요하다면 -> CSR + SSR = Universal랜더링을 고려해야한다!