실시간으로 웹사이트가 그려지는 과정
브라우저는 두 개의 엔진이 들어가 있다
1️⃣ 렌더링 엔진
- 사용자가 볼 화면을 그려내는 역할
- 텍스트로 된 문서를 읽어내 사용자가 볼 수 있는 실제 웹사이트 화면을 만들어준다
- 구글의 라이트하우스 기능을 이용하면 렌더링 과정을 볼 수 있다
- 개발자 도구를 보면 js, html, css, 이미지 파일 등의 크기, 로딩 속도까지 모든 정보가 나온다
2️⃣ 자바스크립트 엔진
- 자바스크립트 코드를 읽어내 기능을 작동시키는 역할
- 압축파일을 열어 실행하는 과정과 비슷
📝 한줄정리 : 렌더링하는 위치의 차이
ssr
- 서버에서 렌더링
- 경로 변경 시 매번 서버에서 렌더링해서 클라이언트에 응답 보낸 후 클라이언트에서 렌더링 완료
const express = require("express");
const app = express();
const infoArr = [
"csr과 차이점이 느껴지나요?",
"ssr이란?",
"HTML은 어디서 조작될까요?",
"Server Side Rendering",
"검색엔진 최적화(Search Engine, Optimization)에 상대적으로 유리하다.",
"초기로딩 속도가 빠르다.",
"TTV(Time To View)와 TTI(Time To Interact)의 시간 공백이 있을 수 있다."
];
app.get("/", (req, res) => {
res.send(
"<html><body><h1>" +
infoArr[Math.floor(Math.random() * infoArr.length)] +
"</h1><h1>SSR</h1>" +
"<h2>Server Side Rendering이란 무엇인가?</h2>" +
"</body></html>"
); //html의 형태로 데이터를 모두 표현을 해서 응답으로 전송
});
app.listen(8080);
csr
- 클라이언트에서 렌더링
- 첫 렌더링에서 필요한 모든 파일을 받음(골격이 되는 단일 파일(ex. index.html)과 필요한 자바스크립트 파일들(index.html의 id="app"에 mount할 App.js와 router를 이용해 경로별로 저장한 파일들)을 받는다)
- 경로 변경 시 파일 중 해당하는 파일을 렌더링
cf. csr 같은 경우 위와 같이 첫 렌더링에서 받아야 하는 파일들이 많기 때문에 경로별로 파일을 번들링하는 빌드 과정이 필요하다.
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
//html에 #root만 있고 여기에 App 컴포넌트를 마운트한다
);
1️⃣ 검색 엔진 최적화 (search engine optimization) : ssr
2️⃣ 첫 화면 렌더링이 빨라야 하는 경우: ssr
3️⃣ 웹 페이지가 사용자와 상호작용이 많은 경우 : csr
ex. 네이버 블로그 : ssr (html 파일에 모든 내용이 들어있음)
ex. 아고다 : csr (html은 비어있음, 필요한 정보는 js로 경로마다 다르게 들어옴)
정적 웹사이트: HTML/CSS/JS 파일의 소스 코드 그대로 작동, 코드 자체로 배포되는 사이트 (CSR, Client Side Rendering)
동적 웹사이트: 서버에 의해 HTML 파일이 동적으로 생성되는 사이트 (SSR, Server Side Rendering)
요청에 따라 결과가 변하는 동적인 웹페이지를 만드는 방법
동적 웹사이트를 만드는 기술 : PHP, JSP, ASP 등
(물론 node.js로도 동적 웹페이지를 만드는 것이 가능합니다)
// 동적 웹페이지 예제 (node.js)
const http = require('http');
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'text/html'); // HTML 문서의 형태로 전달됨
res.end('<h1>동적 웹페이지</h1><p>with 랜덤한 값</p>' + Math.random()); // 서버에 의해서 동적으로 바뀜
});
server.listen(3000);
cf. 소프트웨어 빌드
로컬에서는 npm start로 개발 서버 실행
배포 시 실행할 개발 서버 실행 필요 없고 정적 파일을 호스팅하는 서비스에 결과만 업로드하면 된다
cf. 정적 파일
정적 페이지
동적 페이지
- csr
- ssr
동적 웹사이트 / 정적 웹사이트
1) 동적 웹사이트
2) 정적 웹사이트
동적 파일 / 정적 파일
정적 웹페이지
동적 웹페이지
데이터가 없는 html 문서나 static 파일만을 처음 받아와 로드
이후 데이터를 요청하여 받는다
js를 사용해 브라우저에서 페이지를 직접 진행한다
모든 로직, 데이터 가져오기, 템플릿 및 라우팅 등은 서버가 아닌 클라이언트 측에서 처리한다
1-2. ssr (mpa)
서버에서 동적으로 데이터를 전부 삽입해 완성된 html을 넘겨준다
새로운 페이지 요청 시 정적 리소스가 다운로드 되고, 그에 맞춰 전체 페이지를 다시 렌더링한다
인터넷 주소창에 주소를 입력하거나 링크를 클릭하는 등의 요청을 하면 그에 맞는 완전한 페이지를 받아오고 다시 렌더링 된다
장점 : 검색 엔진 최적화 관점에서 유리
단점 : 새로운 페이지를 이동할 때마다 완전히 새로 렌더링되므로 깜빡거리고 프론트엔드와 백엔드가 밀접하게 연결되어 개발이 복잡할 수 있다