MPA는 SSR 방식을 채택한다.
SSR란 서버로부터 완전하게 만들어진 html파일을 받아와 페이지 전체를 렌더링 하는 방식이다.
- User가 Website를 Request함
- Server는 'Ready to Render', 즉시 렌더링 가능한 html 파일을 만듬.
- 클라이언트에 전달되는 순간, HTML이 즉시 렌더링 됨 (사이트 자체는 조작 불가능(Javascrpit를 읽기전))
- 클라이언트가 자바스크립트를 다운받음
- 다운받아지고 있는 사이에 유저는 컨텐츠를 볼 수 있지만 조작은 불가, 이때 사용자 인터렉션을 기억함
- 브라우저가 Javascrpit 프레임워크를 실행
- JS가 컴파일 되고 기억하고 있던 인터렉션을 실행, 이제 상호작용 가능
서버에서 이미 렌더 가능한 상태로 클라이언트에 전달되기 때문에 JS가 다운되는 동안 사이트를 볼 수 있음
TTV(Time To View)와 TTI(Time To Interact)간에 시간 간격이 존재함. 즉, 버튼이 보이더라도 눌러도 반응 없을 수 있음.
CSR은 SPA을 채택한다.
사용자의 요청에 따라 필요한 부분만 응답 받아 렌더링 하는 방식이다.
- User가 Website를 Request함
- CDN이 HTML 파일과 JS로 접근할 수 있는 링크를 클라이언트로 보냄(CDN:엔드 유저의 요청에 '물리적'으로 가까운 서버에서 요청에 응답하는 방식)
- 클라이언트가 HTML과 JS를 다운로드 받음 (아무것도 보이지않음)
- 다운이 완료된 JS가 실행되고 데이터를 위한 API가 호출됨 (유저는 Placeholder를 보게 됨)
- 서버가 API로부터의 요청에 응답한다
- API로부터 받아온 data를 placeholder 자리에 넣어준다. (상호작용 가능)
서비스, 프로젝트, 콘텐츠 등 성격에 따라 달라진다
1) 상위 노출이 필요하다.
2) 누구에게나 동일한 내용을 노출한다.
3) 페이지마다 데이터가 자주 바뀐다.
4) 웹 사이트에 상호작용이 별로 없다.
1) 개인정보 데이터를 기준으로 구성된다.
2) 좋은 사용자 경험을 제공하고 싶다.
3) 상위 노출보다 고객의 데이터 보호가 중요하다.
4) 사용자와 상호작용할 것이 많다.
Next.js를 사용하면 첫페이지는 SSR로 백엔드 서버에서 렌더링하여 빈 html이 아닌 데이터가 채워진 html을 받아 검색최적화 문제를 해결하고, 다음 페이지부터 CSR로 필요한 데이터만 부분적으로 갱신하여 서버의 과부화를 줄일 수 있다.
하지만 이러한 방법은 서버 환경 구성이나 빌드 등의 작업이 생소한 프론트엔드 개발자에게는 복잡할 수 있다.