SPA
는 CSR(Client Side Redering)
방식으로 렌더링한다.JSON
형식으로 전달받아 페이지를 갱신한다.(페이지의 갱신은 화면 깜빡거림없이 기존 페이지의 내부를 수정하여 보여주는 형식으로 이루어진다.)SPA
를 일반적으로 CSR(Client Side Rendering)
방식으로 렌더링한다고 말한다.속도와 응답시간(높은 성능)
전체 페이지를 다시 렌더링하지 않고, 변경되는 부분만을 갱신하므로 새로고침이 발생하지 않아 네이티브 앱과 유사한 사용자 경험(UX)을 제공할 수 있다.
모바일 친화(모바일 퍼스트 전략)
모바일 앱도 SPA
와 동일한 구조로 개발이되므로 Bacekend
코드를 재사용할 수 있다.
로컬스토리지 캐시
SPA
는 모든 로컬 스토리지
를 효과적으로 캐시할 수 있게 된다.
초기 구동 속도
SPA
는 렌더링되는 최초 시점에 Web Application
이 필요한 모든 정적 리소스(Static Resource
)를 모두 다운로드하기 때문에, 초기 구동 속도가 MPA
에 비해 상대적으로 느리다.
SEO(검색엔진 최적화) 이슈
SPA
는 검색엔진이 색인할 만한 컨텐츠가 없기 때문에 최적화 하기 힘들다.
⚠️ SSR 방식으로 해결은 가능하다.
보안 문제
패킷 캡처 후 XSS(Cross Site Script) 공격 코드 삽입할 수 있는 위험이 있다.
⚠️ 프론트엔드 비즈니스 로직 최소화, 서버 검증 로직 추가로 해결 가능하다.
React, Angular, Vue
request
) 할 때마다 Server
로부터 정적 리소스(html, javscript, css
)를 다운로드 한다.MPA
는 SSR(Sever Side Rendering)
방식으로 렌더링한다.SEO 친화적이다.
MPA를 사용하면 여러 페이지가 생성되기 때문에, 더 많은 수의 키워드를 타겟팅하여 색인할 수 있다.(검색 엔진이 작동하는 방식에 더 적합하다.)
확장성이 상대적으로 높다.
다중 페이지로 원하는 만큼 페이지를 추가할 수 있다.
페이지 이동시 전체 페이지를 다시 렌더링하기 때문에, 응답시간이 느리다.
정적 리소스(html, css, javascript)가 새로 다운로드 받아지기 때문이다.
보안 및 유지보수
다중 페이지로 추가되어 있는 모든 페이지가 안전한지 확인해야하므로, 보안 및 유지보수에 어려움이 상대적으로 크다.
JSP, PHP
SPA | MPA | |
---|---|---|
렌더링 방식 | CSR | SSR |
구현 언어 | JS Framework (Vue, React Angular) | HTML, JSP, PHP 등 |
보안 | 코드 노출이 쉽다 | 서버사이드 언어를 사용하면 노출되지 않는다. |
렌더링 속도 | 상대적으로 느림 | 상대적으로 빠름 |
서버 응답 속도 | 상대적 빠름 | 상대적 느림 |
UX 친화도 | 높다 | 낮다 |
UI 개발 및 유지보수 | 쉽고 빠르게 해당 부분만 가능 | 전체 페이지를 수정해야 하므로 오래 걸림 |
브라우저 의존성 | IE8이하 미지원 | 웹 브라우저에 비교적 독립적 |
캐싱 가능 | 한번에 받아와 캐싱 | 캐싱하기 어렵다.(세션) |
SEO 최적화 | 비교적 어렵다 (SSR써야 가능) | 최적화에 용이함. |