TTFB(Time to First Byte): HTTP 요청 보낼 경우, 서버에서부터 첫번째 Byte(정보)가 오기까지 걸리는 시간
TTFB = 클라이언트 요청 + 서버의 요청 처리 시간 + 서버의 클라이언트로 응답
FP(First Paint): 첫번째 픽셀이 스크린에 paint되었을 때 시간
FCP(First Contentful Paint): DOM에 속한 컨텐츠 일부가 스크린에 Paint되었을 때 시간
TTV(Time To View): 사용자가 애플리케이션 화면을 보기까지 걸리는 시간
TTI(TIme To Interact): 사용자가 애플리케이션 화면과 상호작용할 수 있기까지 걸리는 시간
여러 개의 페이지로 이루어진 애플리케이션으로, 새로운 페이지 요청할 때마다 서버에서 렌더링 된 정적 리소스 전달
TTV
가 빠름하나의 페이지에서 새로운 페이지를 불러오지 않고, 필요한 부분만 동적으로 변경하는 애플리케이션
데이터 수정, 조회 시 동적으로 페이지 구성하여 페이지 전체적으로 새로고침 되지 않고 부분적으로 변경됨
CSR 렌더링 방식 채택
ex) react, vue, angular
PHP, JSP 로 구성된 정적인 페이지 하나만 존재한다면 그것 역시 SPA
TTV == TTI
TTV
가 늦음서버에서 사전에 렌더링된 파일을 클라이언트에게 전송하고, 클라이언트는 이를 즉시 렌더링하는 방식
서버로 요청을 보낸 후, 서버에서 완성된 HTML 파일 응답
브라우저 렌더링 엔진에서 렌더링 과정 처리
① HTML 파싱 후 DOM 트리 생성
② CSS 파싱 후 CSSOM 트리 생성
③ DOM + CSSOM 트리 결합 후, Render 트리 생성
④ UI 백엔드에서 Render 트리 읽고, layout 작업 수행 후 paint 작업 수행
⑤ 브라우저 화면에 출력(⇒ 이때는 동작 아무것도 안함!)
JS 실행
FC, FCP 빠름
클라이언트 PC 성능에 크게 영향 받지 않음
서버에서 최소한의 HTML을 받고, 내부에 위치한 script 태그로 JS 파일 받아 클라이언트에서 페이지 렌더링하는 형식
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta
name="description"
content="Web site"
/>
<title>App</title>
</head>
<body>
<div id="root"></div>
<script src="app.js"></script>
</body>
</html>
서버로 요청을 보낸 후, 서버에서 완성된 css, js 링크만 존재하는 빈 HTML 파일 응답
브라우저 렌더링 엔진에서 렌더링 과정 처리 & JS 실행
① HTML 파싱 후 DOM 트리 생성
② CSS 파싱 후 CSSOM 트리 생성
③ DOM + CSSOM 트리 결합 후, Render 트리 생성
④ UI 백엔드에서 Render 트리 읽고, layout 작업 수행 후 paint 작업 수행
⑤ 브라우저 화면에 출력(⇒ 이때는 동작 아무것도 안함!)
이때, 스크립트 태그를 통해 JS 파일을 한 줄씩 읽으며 바로 실행
→ 미완성인 UI요소에 하나하나 동적으로 생성하며 그려줌
⇒ 사용자는 JS로 화면 구성할 때까지 화면 볼 수 없음
FP, FCP가 느림
클라이언트 PC 성능에 따라 렌더링 속도가 좌우됨
SPA와 MPA는 애플리케이션을 구동할 때 페이지를 몇 개를 사용하는지에 대한 차이
CSR과 SSR은 페이지의 렌더링이 클라이언트에서 일어나는지 서버에서 일어나는지에 대한 차이
즉, SPA를 구현하기 위해 CSR 방식을 사용하는 것!
SPA는 SSR로 구현하기 어렵고, MPA는 CSR로 구현하기 어려움
SPA에서 SSR 방식을 채택하면 MPA와 다를 것이 없음!
하지만, SPA에서 첫 로딩에만 SSR 사용하고, 이후 요청들은 CSR 방식 사용 → Next.js
The Benefits of Server Side Rendering Over Client Side Rendering
CSR 렌더링, SSR 렌더링 과정의 차이점에 대해 알아보자! ⚖️