https://slender-danger-059.notion.site/SSR-CSR-e6005878a059468495523d6483bb3a6d
여러 페이지로 구성된 웹 어플리케이션. 사용자의 인터렉션이 발생할 때마다 서버로부터 새로운 html을 받아와서 해당 링크로 이동하여 페이지 전체를 새로 렌더링하는 전통적인 웹 페이지 구성 방식.
하나의 페이지로 구성된 웹 어플리케이션. 브라우저에 최초에 한번 페이지 전체를 로드하고, 이후부터는 특정 부분만 데이터(JSON)를 바인딩하는 방식.
request
) ,컴파일된 HTML은 클라이언트 브라우저로 전송.(response
)interactive
)요청한 페이지에 필요한 리소스만 다운로드하여 페이지를 생성하므로 렌더링에 필요한 시간이 짧음.
서버에서 페이지를 생성하므로 검색엔진에서는 빈 HTML 문서가 아닌 완성된 HTML 문서를 수집할 수 있으므로 검색엔진 최적화에 용이하다.
SSR 방식은 사용자가 더 빨리 페이지를 조회할 수는 있지만 자바스크립트 실행이 완료될 때까지는 클릭 등 페이지 내에서의 상호 작용이 불가능.
페이지를 이동할 때마다 해당 페이지에 필요한 리소스를 다운로드하고 페이지를 다시 생성해야 하므로 CSR 방식에 비해 페이지 이동에 TTFB
(Time to First Byte)가 느리다.
매 페이지 요청마다 전체 UI를 다시 로드하기 때문.
request
)response
) (이 HTML 파일은 script
, meta
, link
등의 태그를 포함하며, 빈 컨텐츠의 index.html
.)index.html
에 있는 자바스크립트 번들 파일
및 정적 리소스(이미지, CSS 등)를 다운로드.API
요청을 수행하여 동적 컨텐츠를 가져오고 파싱하여 최종 컨텐츠를 렌더링.페이지 렌더링에 필요한 정적 리소스와 번들 자바스크립트 파일은 최초 페이지 접근 시에만 다운로드하고, 이동할 페이지에 필요한 부분만 추가로 요청하므로 페이지 이동에 걸리는 시간은 짧다.(처음 렌더링때 사전에 로드되었기 때문)
CSR 방식은 번들 자바스크립트 실행이 완료된 후, API 응답을 받아오기 전까지는 빈 화면(혹은 별도로 설정한 로딩 화면)이 표출된다. 그리고 API에서 데이터를 받아온 후 화면에서 인터렉션이 가능.
(화면은 보이지만 인터렉션이 되지 않는 경우보다는 아예 화면이 렌더링되지 않는 편이 사용자에게는 더 직관적일 수 있다고 생각.)
브라우저에 HTML 파일이 전송되기까지의 시간(TTFB)은 짧지만, 렌더링에 필요한 리소스와 번들 자바스크립트 파일을 다운로드 한 후 화면을 그리는 데 걸리는 시간이 길기 때문에 전체적인 렌더링 완료 시간은 오래 걸리게 된다. 따라서, 코드 스플리팅 등을 통해 번들 파일의 용량을 줄이는 것이 좋음.
검색 엔진 크롤러가 해당 페이지에 처음 방문했을때는 빈 페이지이기 때문에 이해할 수가 없다. 물론 자바스크립트를 실행시킬 수 있는 구글 크롤러와 같은 검색엔진 크롤러가 등장.
→ DOM에 직접 접근하여 메타 태그 등을 바꿀 수 있는 라이브러리(react-helmet)가 있지만, 아직 많은 검색 엔진 크롤러들이 지원되지 않음.
→ CSR
→ SSR
SSR처럼 서버로부터 완성된 HTML을 받아오지만, 다른 점은 HTML 파일의 생성시점이 빌드 타임. 즉, 각페이지의 HTML, JS, CSS를 빌드함으로써 모든 URL별 파일을 생성.
React의 경우 Next.js, Gatsby.js에서 제공
request
), 엣지 캐싱(edge caching)된 HTML 클라이언트로 반환해 준다.빌드 타임에 이미 HTML 파일이 생성됐기 때문에 빠른 FP
, FCP
, TTI
를 제공.
• 이미 만들어져있는 페이지기 때문에 만약 업데이트하고자 한다면 다시 빌드시켜야 함.