신입개발자 2021. 6. 6. 23:14

SPA 란 무엇인가

SPA란 Single page Application의 약자이다 SPA는 즉 하나의 페이지 애플리케이션이다 웹사이트 전체를 하나의 페이지에 담아 동적으로 화면을 바꿔가면서 표현하는 것이 SPA이다 이미지에서 전통적인 웹페이지는(좌측) SPA웹페이지는(우측)처럼 구성되어있다

이미지 출처 https://www.excellentwebworld.com/what-is-a-single-page-application

기존에는 사용자가 다른 페이지로 이동할 때마다 새로운 HTML을 받아오고 페이지를 로딩할 때마다 서버에서 리소스를 전달받아 해석한 뒤 화면에 보여주었다 이렇게 사용자에게 보이는 화면은 서버 측에서 준비했었다 사전에 HTML 파일을 만들어서 제공하거나 데이터에 따라 유동적인 HTML을 생성하는 템플릿 엔진을 사용하기도 했었다

요즘은 웹에서 제공되는 정보가 정말 많기 때문에 새로운 화면을 보여주어야 할 때마다 서버 측에서 모든 뷰를 준비한다면 성능상의 문제가 발생할 수 있고 예를 들어 트래픽이 너무 많이 나올 수도, 사용자가 몰려 서버에 높은 부하가 쉽게 걸릴 수도 있다 속도와 트래픽 측면에서는 캐싱과 압출을 해서 서비스를 제공한다면 어느 정도 최적화될 수 있지만 사용자와의 인터랙션이 자주 발생하는 모던 웹 애플리케이션에는 적당하지 않을 수도 있다 애플리케이션 내에서 화면 전환이 일어날 때마다 HTML을 계속 서버에 요청을 하면 사용자의 인터페이스에서 사용하고 있던 상태를 유지하는 것도 번거롭고 바뀌지 않는 부분까지 새로 불러와서 보여주어야 하기 때문에 불필요한 로딩이 있어서 비효율적이다

그래서 리액트 같은 라이브러리 혹은 프레임워크를 사용하여 뷰 렌더링을 사용자의 브루어저가 담당하도록 하고 우선 애플리케이션을 브라우저에 불러와서 실행시킨 후에 사용자와의 인터렉션이 발생하면 필요한 부분만 자바스크립트를 사용하여 업데이트해 준다 만약 새로운 데이터가 필요하다면 서버 API를 호출하여 필요한 데이터만 새로 불러와 애플리케이션에서 사용할 수도 있다

싱글 페이지라고 무조건 화면이 한 종류는 아니다 SPA는 서버가 사용자에게 제공하는 페이지는 한종 류지만 해당 페이지에서 로딩된 자바스크립트와 현재 사용자 브라우저의 주소 상태에 따라 다양한 화면을 보여줄 수 있다

다른 화면을 보여주는것을 라우팅이라고 한다 리액트 라이브러리 자체에 이 기능이 내장되어 있지는 않은 대신 브라우저의 API를 직접 사용하여 이를 관리하거나 라이브러리를 사용하여 이 작업을 더욱 쉽게 구현할 수 있다

SPA의 단점

SPA의 단점은 앱의 구모가 커지면 자바스크립트 파일이 너무 커진다는 것이다 페이지 로딩 시 사용자가 실제로 방문하지 않을 수도 있는 페이지의 스크립트도 불러오기 때문이다 하지만 스플리팅(code splitting)을 사용하면 라우트 별로 파일들을 나누어서 트래픽과 로딩 속도를 개선할 수 있다