momo
5 min readJun 5, 2022

--

웹 렌더링의 2가지 접근 (CSR,SSR) 부수기

안녕하세요! 오늘은 웹 개발자라면 꼭 알고 있어야할 CSR & SSR 개념에 대해 알아보며 정리해보고자 합니다.

SPA (SINGLE PAGE APPLICATION)

react & angular & vue 와 같은 프레임워크를 사용해 개발되는 방식

하나의 페이지로 구성된 웹 APP

MPA (MULTI PAGE APPLICATION)

탭을 이동할 때 마다 서버로부터 새로운 HTML을 받아와 렌더링 (전통적인 방식)

전환시마다 화면이 깜빡이는 현상 발생 → AJAX 등장 이후 원하는 부분만 클라이언트쪽에서 렌더링해 UX 개선.

CSR (CLIENT-SIDE RENDERING)

일반적으로 SPA에서 차용하는 방식
초반에 모두 다운로드 → 이후 새로운 페이지 요청에 데이터만 갱신하여 해결

SSR (SERVER-SIDE RENDERING)

일반적으로 MPA에서 차용하는 방식

새로운 요청이 있을 때마다 → 렌더링 방식으로 SSR사용

전통적인 RENDERING 차용 방식

CSR : 클라이언트 측에서 렌더링하는 방식

SSR: 서버측에서 렌더링하는 방식

(어느쪽에서 rendering을 준비하는지에 대한 개념)

  • SSG (StaticSiteGeneration) : 미리 다 만들어 놓은 페이지를 요청시에 응답 ( 바뀔 일이 없는 캐싱이 필요한 페이지에 적합 )

동작과정

CSR :

유저가 웹사이트에 방문 → 브라우저가 서버에 콘텐츠 요청 → 빈 HTML을 response로 보냄 → 브라우저가 연결된 js링크를 통해 서버에서 js 다운로드 (동적으로 DOM 생성) → 브라우저에 렌더링

  • 브라우저가 js 다운로드 & 동적 DOM 생성하기 위해 초기 로딩 속도가 느림
  • 하지만 이후 request에 따라 서버에서 해당 데이터만 response 받아 사용하면 되기 때문에 이후 구동 속도는 매우 빠른 편
  • 또한 서버 부하가 적고, UX가 쾌적한 편

하지만 브라우저가 가진 웹 크롤러는 HTML을 읽어 검색 가능한 색인을 만들어내는데, 웹 크롤러봇 입장에선 CSR HTML은 텅텅 비어있는 상태

CSR은 검색엔진 최적화에 불리하다는 치명적인 단점이 있습니다.

(구글봇은 JS를 실행할 수 있기 때문에 CSR 크롤링이 가능하다는 주장이 있음. 하지만 아직 실험단계, SSR 고려 권장)

SSR:

유저가 웹사이트 방문 → 서버에 콘텐츠 요청 → 렌더링 준비를 마친 HTML, JS CODE를 response를 전달 → 브라우저는 HTML 렌더링 → js코드를 다운로드 → HTML에 JS 로직 연결

  • 모든 데이터 HTML에 담겨 전달되기 때문에 SEO에 유리
  • JS다운로드를 기다려야하지 않기 때문에 초기 구동속도가 빠름
  • TTV(TIMETOVIEW) !== TTI(TIMETOINTERACTION)
    (인터렉션가능한 페이지가 아닌 상태로 초기 노출)
CSR & SSR 장단점

CSR + SSR / SSG 도입

  1. without framework

2. with framework

실제 현업에서 2가지 방법을 다른 프로젝트에 각각 사용하고 있습니다.

프레임워크를 사용하다보면 블랙박스 영역이 생기기 마련이기 때문에 개인적으론 서버 관련 지식이 조금이라도 있다면 전자의 방식이 더 매력적이라고 생각합니다.

CSR + SSR

  • Isomorphic App, Universal Rendering

서버와 클라이언트에 동일한 코드가 동작

서버와 클라이언트가 같은 코드로 돌아가기 때문에 window와 같은 객체를 해결하지 못할 수 있지만,

초기 로딩속도 보완, SEO 개선, CSR의 장점을 그대로 가져갈 수 있어 매우 유용합니다.

그렇다면 어떤 방식을 사용해야할까?

답은 “서비스에 따라 다르다.” 입니다.

  • 만약 서비스가 사용자와의 상호작용이 많고, 대부분 페이지가 고객의 개인정보 기반이라면 SEO보다 데이터 보호측면이 중요. (모든 서비스에 SEO가 필요하지 않다) → CSR이 적합
  • 만약 회사 홈페이지와 같은 노출에 신경써야하는 페이지나 누구에게나 같은 페이지를 공유해야하는 서비스라면 (+ 업데이트도 자주 필요한)→ SSR이 적합
  • 만약 노출에 신경써야하지만, 자주업데이트 되지않는 고정된 페이지라면 → SSG가 적합

… 그리고 이를 모두 고려해야한다면

최종보스 두두등장

각자의 서비스에 적합한 방식으로 렌더링을 설계하고, 구현해보는 경험이 매우 중요한 것 같습니다 ( 결국 다 만지게 될테지만요 )

어떠셨나요!? 도움이 되셨다면 박수로 응원해주시공 오늘도 행코하세요~!!!

--

--