Dev/Web

[Javascript] CSR vs SSR

더움바다 2025. 1. 24. 01:27

CSR

CSR은 웹 페이지의 렌더링을 클라이언트, 즉 사용자의 브라우저에서 수행하는 방식입니다. 서버는 최소한의 HTML과 필요한 JavaScript 파일을 전송하고, 브라우저는 이 JavaScript를 실행하여 동적으로 페이지를 구성합니다.

https://ferie.medium.com/what-is-the-client-side-rendering-and-how-it-works-c90210e2cd14

 

  1. 사용자가 웹 페이지를 요청하면, 서버는 기본적인 HTML과 JavaScript 파일을 클라이언트에 전송합니다.
  2. 브라우저는 수신한 JavaScript를 실행하여 필요한 데이터를 서버의 API로부터 가져옵니다.
  3. 가져온 데이터를 사용하여 브라우저에서 동적으로 HTML을 생성하고 화면에 표시합니다.

장점

  • 부드러운 사용자 경험: 페이지 전환 시 전체 페이지를 다시 로드하지 않고 필요한 부분만 업데이트하므로, 애플리케이션이 더 빠르고 부드럽게 동작합니다.
  • 서버 부하 감소: 클라이언트에서 대부분의 렌더링 작업을 처리하므로 서버의 부담이 줄어듭니다.

단점

  • 초기 로딩 시간 지연: 초기 로딩 시 필요한 모든 JavaScript 파일을 다운로드하고 실행해야 하므로 첫 화면 표시까지 시간이 더 걸릴 수 있습니다.
  • SEO 한계: 검색 엔진 크롤러가 JavaScript를 완전히 처리하지 못하는 경우, 페이지의 콘텐츠를 제대로 인덱싱하지 못할 수 있습니다.

 

 

SSR

SSR은 서버에서 완전한 HTML 페이지를 렌더링하여 클라이언트에 전송하는 방식입니다. 브라우저는 수신한 HTML을 바로 표시하며, 필요한 경우 추가적인 JavaScript를 로드하여 상호작용을 활성화합니다.

https://www.heavy.ai/technical-glossary/server-side-rendering

 

  1. 사용자가 웹 페이지를 요청하면, 서버는 해당 요청에 맞는 완전한 HTML 페이지를 생성합니다.
  2. 생성된 HTML 페이지가 클라이언트에 전송되고, 브라우저는 이를 즉시 렌더링하여 사용자에게 표시합니다.
  3. 추가적인 상호작용이 필요한 경우, 브라우저는 관련 JavaScript 파일을 다운로드하여 실행합니다.

장점

  • 빠른 초기 로딩: 서버에서 미리 렌더링된 HTML을 전송하므로 첫 화면이 빠르게 표시됩니다.
  • SEO 친화적: 검색 엔진이 완전한 HTML 콘텐츠를 쉽게 크롤링하고 인덱싱할 수 있어 검색 엔진 최적화에 유리합니다.

단점

  • 서버 부하 증가: 모든 요청에 대해 서버가 페이지를 렌더링해야 하므로 서버 자원 소모가 증가할 수 있습니다.
  • 복잡한 개발 환경: 서버와 클라이언트 간의 상태 관리와 데이터 동기화가 복잡해질 수 있습니다.
특성 CSR (클라이언트 사이드 렌더링 SSR (서버 사이드 렌더링)
렌더링 위치 클라이언트(브라우저) 서버
초기 로딩 속도 느림 (초기 로딩 시 Javascript를 모두 다운받으므로 느림 - 이를 해결하기 위해 Code Splitting이라는 기술을 사용) 보통 (한 페이지를 완전히 그리고 받아서 보여주므로 Javascript를 모두 다운받는 CSR보단 빠르지만 많이 빠르지는 않음)
페이지 전환 속도 빠름 (이미 초기 로딩 때 Javascript를 모두 다운받았기에 필요한 부분만 추가적으로 받으면 되서 빠름) 보통 (새로운 페이지 요청 시 전체 페이지를 새로 그려서 다운받아야하므로 CSR보다 느림)
SEO 최적화 나쁨 (HTML을 받을때 빈 HTML을 받아서 Javascript로 그리는 형식이기 때문에 Javascript 실행해서 크롤링하는 방식이 오래 걸리기도 하고 렌더링전에 수집해버리면 페이지를 빈 페이지로 인식하기도 하기에 어렵다, 동적 렌더링이라는 방식이 있기는 한데 권장하지는 않는다) 좋음 (이미 서버에서 페이지를 다 그려서 보내주기 때문에 크롤러는 그걸 읽기만 하면 된다. 그래서 SEO가 쉽다)
서버 부하  낮음 (렌더링을 클라이언트에서 전부 처리하기 때문에 서버가 할 일은 HTML, Javascript와 같은 파일들을 보내주는 일밖에 없다) 보통 (렌더링을 서버에서 해줘야 하므로 CSR보다 부하가 더 많이 걸린다)

 

그럼 뭘 써야 할까?

상황 CSR SSR
SEO가 중요한 경우 (브라우저가 상품일 경우) X (해당 경우는 SEO가 중요하다 볼수 있기에 권장하지 않는다) O
정적 콘텐츠 위주일 경우 X (어처피 정적 사이트 만들어놓고 계속 가져다 쓸수 있으니까 굳이?) △ (SSR로 해도 되기는 하는데 SSG로 하는게 낫다 - SSG는 다음 글에서 다룰 예정이다)
SEO가 안 중요한 경우 (ex: 백오피스 툴) O (SEO 필요 없으면 CSR이 더 낫다) X
데이터가 자주 갱신되는 경우 O △ (서버에서 데이터까지 가져와서 렌더링해봤자 데이터가 바로 갱신되니 그렇게까지 큰 의미는 없을수도 있다)
사용 예시 대시보드, 백오피스 툴 등등 블로그, 마케팅 페이지 등등

 

근데 요즘에는 CSR로 시작한 react나 vue같은 프레임워크(라이브러리)에서 SSR지원을 추가하는 것들을 보면 SSR에서 CSR로 갔다가 다시 CSR에서 다시 SSR로 돌아가고 있는것 같다.

https://ko.vuejs.org/guide/scaling-up/ssr.html 

https://ko.react.dev/reference/rsc/server-components