SPA (Single Page Application)
SPA는 Single Page Application의 약자로 단 하나의 HTML 문서로만 돌아가는 웹페이지이다. 하나의 HTML로 사용자의 요청을 수행해야 하기 때문에 내용이 동적으로 바뀐다는 특징이 있다.
이를 잘 이해하기 위해서는 먼저 웹사이트의 종류에 대해 알아봐야 한다.
웹사이트는 정적인 웹과 동적인 웹이 있다.
먼저 정적 웹사이트는 단순히 HTML과 CSS, JS의 구성으로 서버에서 미리 저장된 파일이 client에게 그대로 전달되는 사이트이다. 정적이라는 말처럼 항상 같은 내용만을 보여준다. 사용자의 클릭이나 드로우에 따라 웹사이트가 변하지 않는다.
동적 웹사이트는 서버에 있는 데이터를 가공하고 처리한 뒤 전달되는데, 사용자의 행동에 따라 실시간으로 데이터가 변경된다.
예전에는 일반 위키피디아 페이지처럼 정적 웹사이트가 주류였지만, 최근에는 유저에게 동적인 사용자 경험을 제공하고 데이터를 실시간으로 변경하는 기능이 존재하기 때문에 동적 웹사이트로 바뀌는 추세이다.
SPA의 단점
SPA는 한 HTML페이지에서 동적으로 여러 정보와 데이터를 제공하기 때문에 한번 페이지를 로드하고 AJAX를 통해 필요한 부분만 데이터를 받아온다.
이런 방식 때문에 만약 앱의 규모가 커진다면 자바스크립트 파일이 너무 커질 수 있고, 동적 페이지이기 때문에 SEO, 크롤러가 페이지 정보를 수집하지 못해 검색 엔진에서 우리가 만든 페이지를 검색하지 못할 수 있다.
CSR (Client Side Rendering)과 SSR (Server Side Rendering)
위에서 언급했듯 최근에는 동적인 웹사이트가 많아지면서 렌더링하는 방식도 두가지 방식으로 갈리고 있다.
CSR (Client Side Rendering)
CSR은 Client Side Rendering의 약자로 Client 쪽에서 렌더링이 일어나는 방식을 말한다.
서버는 Client로부터 요청이 들어오면 HTML과 JS를 반환하고, Client는 그것을 받아 렌더링을 한다.
이후 받은 모든 로직이 담겨있는 JS를 통해 데이터를 가져오기 위해 API가 호출되고 server는 이 API에 응답하여 데이터를 보내준다.
이제 API를 통해 가져온 데이터를 PlaceHolder에 넣는다. 이렇게 되면 이제 페이지는 상호작용이 가능해진다. -> SPA의 렌더링 방식
CSR의 동작 순서를 요약해보면,
1. 사용자가 웹 페이지를 방문하면 (서버에 요청하면) server는 최소한의 HTML(index.html, 빈 페이지)을 반환하고
2. index.html에 들어있는 JS파일을 실행하면서 AJAX를 통해 API를 요청하여 동적 컨텐츠를 다운받는다.
3. 추가로 다른 페이지 이동을 요청하면 다른 HTML파일을 서버에게 받지 않고 이미 받은 JS파일을 사용해 렌더링한다.
다만 CSR은 서버에서 처리하는 과정이 없어 자바스크립트가 모두 다운로드되고 실행이 끝나기 전까지 사용자는 화면을 볼 수 없다. 또 사용자의 입력에 따라 Client가 해석하고 API를 요청하여 데이터를 받고 다시 일부만 렌더링하는 방식이기 때문에 SEO가 어렵다는 단점, 초기에 빈페이지를 제공하기 때문에 사용자가 빈페이지를 보게 되어 사용자 경험이 떨어질 수 있다는 단점이 있다.
SSR (Server Side Rendering)
SSR은 MPA(Multi Page Application)의 렌더링 방식이다.
SSR은 서버로부터 완전히 만들어진 HTML파일을 받아와 페이지 전체를 렌더링 하는 방식이다. 만약 페이지를 이동하거나 새로고침하면 서버에서 매번 완성된 HTML(CSS와 JS가 적용된)을 응답한다.
SSR은 초기에 'Ready to Render'인 즉시 렌더링 가능한 html 파일을 만들어 Client에게 제공한다. Client는 이 임시 HTML 파일을 렌더링(하지만 JS가 읽히기 전이라 조작불가능한 상태)하고 Client가 JS를 다운받고(다운 받는 동안 사용자의 조작을 기억한 뒤 나중에 조작을 실행) 상호작용이 가능하게 된다.
SSR은 CSR보다 초기 렌더링 속도는 빠르지만 (Ready to Render라는 HTML을 만들어 제공하기 때문) 전체 렌더링 속도는 느리다. (서버에서 모든 페이지를 다시 구성하고 보내기 때문)
SPA가 반드시 CSR의 렌더링 방식으로만 이뤄지는 것은 아니다. SSR 방식으로도 구현이 가능하다고 한다.
https://hanamon.kr/nuxt-js-%eb%9e%80/
Reference
https://hahahoho5915.tistory.com/52
[간단정리] CSR vs SSR 특징 및 차이
개요 CSR vs SSR 특징 및 차이점 알아보기 내용 CSR Client Side Rendering의 약자 말 그대로 SSR과 달리 렌더링이 클라이언트 쪽에서 일어난다. 즉, 서버는 요청을 받으면 클라이언트에 HTML과 JS를 보내준다
hahahoho5915.tistory.com
https://velog.io/@hongduhyeon/React-SPA
[React] SPA 란?
SPA는 Single Page Application의 약자이다. 예전에 웹 페이지에서는 페이지를 보여줄 때 여러페이지로 구성이 되어있었다.A html, B html, C html ....그리고 페이지를 로딩할때마다 서버에서 리소스를 전달
velog.io
https://kim-mj.tistory.com/275
웹 동작 원리 (SPA, CSR, SSR)
SPA는 웹 개발을 하다보면 한 번쯤 보는 단어이다. SPA란 Single Page Application의 약자로, 단 하나의 HTML 문서로만 돌아가는 웹페이지로 사용자의 요청(request)에 따라 내용이 동적(dynamic)으로 바뀐다.
kim-mj.tistory.com
[ 기술 스터디 ] SSR과 CSR의 차이
자강두천
velog.io
https://dodeon.gitbook.io/study/kimyounghan-spring-mvc/01-web-application/html-httpapi-csr-ssr
HTML, HTTP API, CSR, SSR - dodeon
정적 리소스를 제공할 때는 고정된 HTML, CSS, JS, 이미지, 영상 등을 제공한다.
dodeon.gitbook.io
https://www.youtube.com/watch?v=M4wUvm8Bra8
https://ajdkfl6445.gitbook.io/study/web/csr-vs-ssr-vs-ssg
CSR vs SSR vs SSG - 콥 노트
사용자가 웹 페이지를 방문하면(request), 브라우저는 최소한의 HTML 파일을 다운로드(response) 한다. 이 HTML 파일은 script, meta, link 등의 태그를 포함하며, 빈 컨텐츠의 index.html 파일이라고 보면 된다.
ajdkfl6445.gitbook.io
'웹' 카테고리의 다른 글
비동기 통신 (fetch API, Ajax), 동기와 비동기 (0) | 2023.01.22 |
---|---|
[Django] 장고 View (0) | 2022.11.21 |
[Django] URL Reverse (0) | 2022.11.19 |
[Django] 장고 Form (0) | 2022.11.19 |
[Django] 장고 ORM (2) | 2022.11.19 |