SSR이라고 하니 마치 가챠게임의 등급같다.
내가 해본 가챠게임의 처음이자 마지막은 판타지타워라는 게임이였는데...내 지갑을 훔쳐갔다.
망할
여튼 얼마전 글도 잘안쓰던놈이 SSR이 이렇다느니 저렇다느니 주절주절 쓰다보니 이것도 주제로 글을 쓰면
좋을것같아서 작성한다.
먼저 두개로 나누어 각각의 장점 단점과 결론으로 차이를 간추려 정리한 다음 글을 마무리할 예정이다.
1. CSR
- CSR 두두등장
웹이 태동하며 어느정도의 구조 (즉 리액트나 앵귤러 뷰같은 프레임워크들이 정착되기전 별도의 라이브러리 없이 바닐라
만 사용한 일반적인 경우를 일컫는다)를 갖추게 되었을땐 모든것들이 좋아보였다. 그러다 2010년 즈음을 기준으로
CSR이라 불리우는 기술이 조금씩 보편화 되었다 늘 그렇듯 최초의 타이틀은 대기업 구글의
AngularJs 프레임워크가 가져갔으며 뒤이어 나온 backbonejs,emberjs가 CSR 기술을 달고 나타났다.
이른바 대 CSR 시대가 도래했다. 한가지 공통점이라면 SPA라 불리우는 싱글 페이지 어플리케이션을 위해
위의 도구들이 나타났는데 SPA이라면 으레 당연히 CSR이라 받아드려졌다.
이후 프레임워크 3대장이 등장하며 CSR은 개발자들 사이드에 스탠다드 개발 방법으로 굳어졌다.
- 장점
1. 속도가 굉장히 빠르다.
- 많은 사람들이 고작 첫번째로 내세운 장점이 속도냐고 반문하겠지만 웹의 속도는 웹이 궁극적으로 발전하고자 하는 방향
이다. 소모되는 자원을 줄이고, 양방향 통신을 지원하고 이런 모든 행위들이 웹의 속도를 향상시키기 위해 발전한것이다.
빠른 이유는 서버는 별도의 렌더딩을 하지 않고 파일만 전달하고 클라이언트가 렌더링을 진행하기 떄문이다
빠르다는건 더 나은 사용자경험,다양한 상호작용,빠른 초기 진입 속도를 보장한다는것이다.
그리고 사용자에게 모든것을 전달하는 SSR보다 CSR은 사용자가 필요로할때만 전달하기에 자원을 절약하고
더 빠른 응답속도를 얻었다. 초기에 웹들이(그러니깐 컴포넌트 기반이 아닌 SSR)검색,정렬,필터 등을 적용할떄마다
페이지 전체를 다시 불러와야하는 그 지옥같은 루프에서 해방됨을 의미했다.
그렇기에 사용자가 검색을 요청한다면 검색과 관련된 컴포넌트 데이터만 요청하여 클라이언트라 렌더링하는
이른바 신세계가 열린것이다.
2. 서버의 부담이 줄다.
- SSR은 서버가 렌더링까지 부담해야되기 때문에 서버의 자원 사용이 더 증가하지만 CSR은 그렇지않다
그저 리소스를 던지기만 하면 클라이언트가 알아서 렌더링한다. 이러한 서버의 부담을 줄이는것은 다른
요청의 응답에 더 빠르게 응답할수 있고 서버에게 다른 일을 시킬수 있으며 기업의 입장에서는 서버의
부담 감소는 비용을 절약시키고 언제고 뻗을 수 있는 물리적 서버가 어느정도의 리스크를 완화 시키는
결과를 불러왔다
- 단점
1. 초기 속도가 느려지다.
- 역설적이게도 대규모의 서비스가 구축되며 이 단점은 크게 부각되었다. 필요로 하는 모든 소스를
받아와야하며 클라이언트가 렌더링까지 해야되기 때문에 초기 로딩이 지연되는 이슈가 등장했다.
이 단점은 쇼핑몰 같은 고객의 이탈율을 최소화해야하는 분야에서 더욱 더 단점으로 다가왔으며
후술할 추가 단점까지 물려 골치거리로 다가왔다.
2. SEO의 불가
- 쇼핑몰 혹은 트래픽의 증가가 수익으로 환전될 가능성이 있는 사이트들은 검색엔진의 상단에
노출되길 희망하고 실제로 그러기 위해 굉장히 노력한다. 하지만 일반적인 검색엔진
(퍼블리셔건 프론트엔드 개발자건 검색엔진이 HTML 코드를 크롤링하고 색인하는것을 알고 있을
것이다)은 CSR의 불안전한 HTML파일을 크롤링하여 색인할수 없기 때문에 SEO에 악영향을
주게된다. 왜냐하면 CSR은 렌더링의 주체가 서버가 아니라 클라이언트이기 때문에
렌더링이 일어나지 않으면 정상적으로 노출되지 않기 때문이다.
3. 보안의 헛점
- 보안은 웹 환경에 꼭 필요한 조치이지만 CSR은 특히나 보안이 취약했는데
이는 CSR이 기본적으로 모든 처리를 클라이언트에게 위임했기 때문이다
대표적인 사례는 아래와 같다.(보다 자세한 사항은 각 항목마다 달린 링크를 참조하는게 더 좋다
이 글은 CSR에 대한 글이지 아래같은 보안 사항에 대해 공부하는게 아니니깐)
XSS(Cross-Site Scripting)
https://nordvpn.com/ko/blog/what-is-cross-site-scripting/
What is cross-site scripting?
This in-depth guide will inform you in the basics of cross-site scripting (XSS) and how to prevent yourself from becoming a victim.
nordvpn.com
CSRF 공격
https://owasp.org/www-community/attacks/csrf
Cross Site Request Forgery (CSRF) | OWASP Foundation
Cross Site Request Forgery (CSRF) on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.
owasp.org
2. SSR
- SSR 떠,떳냐?
※ 주의: 아래에서 설명하고자 하는것은 CSR 태동 이전의 SSR과 컴포넌트 기법을 바탕으로 하는
SSR을 혼합해서 설명하고 있다
위에서 언급한것처럼 CSR의 등장 이후 CSR은 개선을 거듭했지만 구조적인 단점은 계속해서 산재했다.
썩어도 준치라고 CSR 이전의 주류로써 간간히 그 명맥을 잇고 있었는데 PHP가 그러했고 JSP가 그러했다.
그러다 CSR의 단점을 지긋지긋하게 여긴 React가 React server라는 라이브러리를 공개했다
리액트 또 너야?
리액트 공식 홈페이지에선 0.12 .0 부터 (공식 홈페이지에선 그렇다는데...)
서버 사이드 렌더링 지원을 포함하며 서서히 컴포넌트 기반의 SSR이 태동하기 시작했다.
초기 SSR은 단점이 많았다. JSP나 PHP는 모든 기능들이 하나의 페이지에 묶여있었기 때문에 정보를 요청하고
다시 표현하기 위해서는 페이지를 다시 불러와야 했으며 사용자 경험을 하락시켰다.
하지만 컴포넌트 기반의 패러다임이 등장하며 모든 부분을 새로 고칠 필요 없이 필요한 부분은 요청하는것이
대세가 되었다 SSR에게도 광명이 들기 시작한것이다.
- 장점
1. 속도도 빠르고! SEO 최적화도 되고!
- 웹의 발전을 동거동락한 SSR답게 규모가 크고 작건 서버에서 렌더링을 해서 전달하기 때문에 대규모의 CSR에
비해 일정부분 속도가 보장되었으며 트래픽이 매출과 연결되는 기관들은 SEO최적화를 할수있다는
장점을 얻었다. 이는 SSR이 서버측에서 이미 렌더링을 하여 완성된 HTML,CSS 파일들을 보여주기 때문에
서치엔진이 크롤링하여 인덱싱을 할 수 있기 때문이다.
2. 보안개선
위에 언급된 보안 취약점들을 대부분 해결할 수 있다 이는 서버가 모든걸 렌더링하고 최종적으로 HTML 파일을
생성해 클라이언트 전달하기 때문에 마음대로 조작하는건 CSR에 비해 굉장히 어렵다.
3. 효율적인 캐싱
서버 사이드 렌더링은 서버측에서 캐싱된 HTML 파일을 제공하여 사용자가 캐시된 파일을 다시 요청하지 않아도
재사용 할 수 있어 서버의 자원을 감소 시키고 서버의 비용을 감소 시킬 수 있다.
- 단점
1. 비용의 증가
- 서버 사이드 렌더링은 서버가 일을 더 해야하기 때문에 서버에 가해지는 부담은 필연적으로 증가할 수 밖에 없다.
이는 서버의 비용을 증가시키고 서버를 관리해야될 인력이 추가로 필요로 할 수 있기 때문에 전체적인 관리
비용을 증가시킨다
2. 크지않은 CSR 기반의 웹페이지보다 초기 속도가 느릴 수 있다.
- CSR이 초기 각광받았던것은 중,소규모 웹페이지의 속도가 빨랐기 때문이다. 엄연히 SSR은 가벼운 CSR보다
속도가 느리다.
3. 어렵다
- 어쨋건 지금의 SSR은 CSR보다 어렵다 이는 생각보다 나름 중요한 문제인데 필자만봐도...
- 차이점
1. 렌더링의 주체가 SSR은 서버 CSR은 클라이언트
2. SEO 최적화은 CSR은 불가능 SSR은 가능
3. 보안적으로 뛰어난건 SSR 취약한건 CSR
4. 서버 부담은 CSR이 낮고 SSR이 높다
- 잡설
- SSR은 컴포넌트 기반의 개발 패러다임이 등장하며 꾸준히 발전해 지금의 CSR보다 좋다(개인적으로?)