- SPA (single-page application) : 싱글 페이지 어플리케이션
- SSR (server-side rendering) : 서버 측 렌더링
- CSR (Client-Side Rendering) : 클라이언트 측 렌더링
현재 vanilla-JS을 배우며 작성하는 코드들의 특징은 클라이언트 측 에서 렌더링(CSR) 된다는 점이다. 각 컴포넌트들을 JS 모듈로 작성하고, 각 컴포넌트의 상태의 변화에 따라 컴포넌트 및 페이지를 동적으로 렌더링을 한다.
그렇다면 이 'CSR란 방식은 왜 사용되게 된 걸까?' 에 대해 로토님이 설명해 주신 내용을 다시 한번 정리하며, 각 개념에 대해 더 알아보자!
html
파일들로 페이지가 구성된다. <html>
~ </html>
전체를 렌더링 한다. 위 방식을 바탕으로 서버에서 일부 html
과 js
만 브라우저로 전달하고,
동작을 js
를 통해 하다보니 렌더링 시점이 섞이는 문제가 발생한다.
또한 웹앱의 발전에 따라 유저와의 인터렉션이 점점 증가하며 이러한 많은 처리들을 서버에서 모두 할 수 없게 되며, 클라이언트 측에서 처리하는 방식을 사용하게 된다.
서버는 단지 API를 이용해 JSON
파일 등을 보내주고, html
의 렌더링은 자바스크립트를 통해 클라이언트 측에서 수행하는 Client-Side Rendering 방식이 사용되게 된다.
html
파일은 index.html
하나만 존재한다. index.html
로 돌린다. 위 처럼 주소에 따라 다른 뷰를 렌더링하는 것을 라우팅(routing)이라고 한다.
이처럼 single-page application은 하나의 ndex.html
파일을 가지지만, 한 종류의 화면 (하나의 주소)만을 가지는 것은 아니다!
html
이 클라이언트에게 바로 전달되기 때문에 초기로딩속도를 줄일 수 있다.html
이 먼저 로딩된 후 js
파일을 불러오기 때문에, 렌더링이 모두 완료되기 전에 사용자가 html
로 로딩된 화면을 먼저 이용할 수 있다.html
과 js
의 로딩, js
의 렌더링이 모두 끝나야 유저가 화면을 볼수 있다. ( 초기구동 이후에는 빠른 인터렉션을 보인다. )위 사진의 넓은 스펙트럼처럼 서비스에 따라 그에 맞는 SSR과 CSR를 적절히 활용하면 된다. 또는 UX에 지장이 가지 않는 선에서 페이지를 나누어 SSR과 CSR의 방식 모두 구성하는 방법도 있다. 이 부분은 조금 더 공부해봐야 할 것 같다 :)
[참고 개념] 렌더링
웹페이지 접속 시, 웹 페이지 및 구성 요소(컴포넌트) 등을 브라우저에 그려주는 것.
- 서버로부터 데이터를 응답받아 HTML을 Parsing 하여 DOM트리를 생성한다.
- DOM트리가 구축되는 동안 브라우저는 Render트리를 구축한다.
- CSS설정 및 위치를 설정한다.
- Render트리가 그려지고 브라우저 화면에 표시된다.
이전에 구현해본 웹앱이 CSR이 였는데, JS가 동적으로 클라이언트 측에서 렌더링에 관여하는 것을 당연하게(?) 생각하고 차이점을 잘 인지하지 못했다. (이것은 내가 SSR방식을 많이 사용해 보지 않은 이유도 있는 것 같다.😸)오늘 수업을 들으며 왜 CSR 방식이 나오게 되었는지에 배경에 대해 이해하며 CSR과 SSR 방식의 차이를 좀 더 깊게 알아볼 수 있었던 기회였다.
내일부터 개인 프로젝트 시작이다...
걱정이 조금 되기는 하지만! 그래도 데브코스에서의 플젝인 만큼 열심히!
좋은 성과와 성장을 이루고 싶다 :)