- 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 방식의 차이를 좀 더 깊게 알아볼 수 있었던 기회였다.
내일부터 개인 프로젝트 시작이다...
걱정이 조금 되기는 하지만! 그래도 데브코스에서의 플젝인 만큼 열심히!
좋은 성과와 성장을 이루고 싶다 :)