Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Next.js
- html
- 개발자
- Sass
- Git
- 취업준비
- error
- 취업
- 코딩테스트
- TypeScript
- 에러
- dynamic import
- React Query
- 공부
- JavaScript
- Browser
- 비동기
- 코딩
- 백준
- 알고리즘
- Vite
- csr
- DOM
- 프론트엔드
- 자바스크립트
- http
- 차이
- React
- SSR
- css
Archives
- Today
- Total
minTech
[JavaScript] CSR, SSR, SSG 본문
"웹브라우저를 렌더링한다."
본격적인 내용에 들어가기에 앞서 브라우저의 렌더링이란 브라우저가 서버로부터 요청해 받은 내용(HTML, CSS, Javascript)을 브라우저 화면에 표시해주는 작업을 말한다.
렌더링 방식 중 CSR, SSR, SSG에 대해 정리해보았다..
☝️클라이언트 사이드 렌더링(CSR: Client-Side Rendering)
서버로부터 받아온 데이터를 클라이언트 내에서 동적으로 조작하여 렌더링하는 방식이다.
동작원리
- 사용자가 웹페이지에 접속하면, 클라이언트는 서버로 요청한다.
- 요청을 받은 서버는 빈 HTML과 JS로 접근할 수 있는 링크를 클라이언트로 보낸다.
- 클라이언트는 서버로부터 받은 텅빈 HTML 문서를 해석하고, 렌더링한다.
- 브라우저는 자바스크립트 파일을 다운받는다.
- 다운이 완료되면 자바스크립트가 실행되며, 리액트가 실행된다.
- 리액트가 렌더링해서 화면을 보여준다.
페이지 이동의 경우
- 브라우저가 클라이언트로 요청을 보낸다.
- 클라이언트를 해당 정보를 처리한 후, 브라우저로 전달한다.
- 브라우저는 처리된 화면을 렌더링한다.
장점
- 클라이언트 측으로부터 데이터를 받아와 렌더링하기 때문에 페이지 간의 이동속도가 빠르다.
- 클라이언트 측에서 데이터를 처리하기 때문에 서버부하가 적다.
단점
- 사용자가 웹 페이지에 처음 접근하면 페이지 렌더링을 위해 필요한 모든 Javascript 파일을 먼저 다운로드한 후에 데이터를 받아오기 때문에 페이지의 초기 로딩 속도가 느리다.
- 검색 엔진 최적화(SEO) 에 불리하다.
- 또한 클라이언트는 서버로부터 받은 Javascript 파일을 해석하고 실행한 후에 자바스크립트 실행에 필요한 데이터를 받아와 화면을 동적으로 렌더링해준다.
- 이 경우에는 처음에는 빈 HTML 화면을 보여주다가 Javascript파일을 실행한 후 서버로부터 데이터를 가져오기 때문에 그 중간에는 빈 페이지가 보이게 된다. 이 경우 화면 깜빡임이 생길 수 있다.
검색 엔진 최적화(SEO)
구글과 같은 검색 엔진이 검색 결과에서 상위에 노출되도록 나의 컨텐츠를 최적화하는 방식을 말한다.
HTML의 경우 meta tag를 잘 이용해주면 효율적으로 검색엔진에 노출시킬 수 있다.
하지만 CSR의 경우 서버로부터 빈 HTML을 받아 먼저 렌더링한다. 따라서 SEO에 굉장히 불리하다.
- 보안성이 낮을 수 있다.
‼️ 서버사이드 렌더링과 정적 생성에 대해 알기 전에 프리렌더링이 무엇인지에 대해 짚고 가는 것이 좋다.
프리렌더링
CSR 방식의 경우 사이트에 접속해서 빈 HTML이 먼저 렌더링 된 후에 그 페이지의 자바스크립트 파일을 다운 받아 실행된 후에 렌더링을 하여 화면을 보여주었다.
하지만 프리렌더링이란 브라우저가 빈 HTML 화면을 받아오기 전에 이루어지는 렌더링이다.
프리렌더링 방식에는 정적 생성(Static Generation)과 서버 사이드 렌더링(Server Side Rendering) 이 있다.
✌️ 서버 사이드 렌더링(SSR: Server Side Rendering)
서버에서 페이지를 렌더링한 후에, 클라이언트에게 전달되어 렌더링하는 방식이다.
서버 사이드 렌더링의 경우 웹브라우저가 GET 리퀘스트를 보낼 대마다 서버가 매번 렌더링한다.
동작원리
- 사용자가 웹페이지에 접속하면, 서버로 요청한다.
- 요청을 받은 서버에서 즉시 렌더링이 가능한 HTML 파일을 만들어 클라이언트로 보낸다.
- 클라이언트는 서버로부터 받은 HTML을 통해 화면을 렌더링한다.
- 클라이언트는 javascript파일을 다운로드하고 실행한다.
- 리액트를 실행하고, 이미 화면에 렌더링 된 것들과 리액트와 연결한다. ( ==> Hydration)
✏️ Hydration
처음에 받은 정적 HTML파일은 단순히 웹 화면을 보여주기 위한 HTML이다.
동작을 위해 필요한 Javscript 요소는 존재하지 않는다.
react Hook이나 이벤트 함수들은 모두 빌드 후에 실행되는 동작이다. 관련 부분들에 대해서는 비어있다.
말 그대로 정적인 파일인 것이다.
이러한 문제를 해결하기 위해 나온 것이 Hydration이다.
Hydration은 다운 받은 Javascript 파일의 코드들을 기존의 화면 렌더링된 요소들과 연결되어 리렌더링 되는 것이다.
장점
- 페이지의 초기 로딩 속도가 빠르다.
- 검색 엔진 최적화(SEO)에 유리하다.
단점
- 대규모의 복잡한 웹 애플리케이션을 개발할 경우 복잡성이 요구된다.
- 페이지 간의 이동속도가 느리다.
- 연속적인 렌더링을 수행할 경우 서버의 과부화 발생의 우려가 있다.
👌 정적 사이트 생성(SSG: Static Site Generation)
빌드를 하는 시점에 렌더링을 한다.
= 소스코드를 빌드할 때 각 페이지의 HTML 파일을 미리 생성해놓고, 요청이 들어오면 바로 해당 파일을 전달하는 방식이다.
동작 과정
- 빌드 시에 모든 웹페이지의 정적 HTML 파일을 미리 만들어둔다.
- 브라우저가 해당 웹페이지에 접속하면 해당 페이지에 대한 HTML 파일을 전송한다.
해당 파일 안에는 관련 javascript 파일의 로딩 코드가 포함되어 있다. - 클라이언트는 javascript파일을 다운로드하고 실행한다.
- Hydration
- 클라이언트가 리액트 화면을 조작한다.
📚참고 자료
https://ko.wix.com/blog/post/what-is-seo
https://velog.io/@hamjw0122/Next.js-Hydration
'JavaScript' 카테고리의 다른 글
[Javascript] 자바스크립트의 기초 - DOM(Document Object Model) (0) | 2025.04.29 |
---|---|
[JavaScript] Array.from()을 어떻게 활용할까 (0) | 2024.03.06 |
[JavaScript] 실행 컨텍스트 (Execution Context) (0) | 2024.02.22 |
[JavaScript] 동기(Synchronous)와 비동기(Asynchronous) (1) | 2024.02.02 |
[JavaScript] HTTP (1) | 2024.01.28 |