맨위로가기

싱글 페이지 애플리케이션

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

싱글 페이지 애플리케이션(SPA)은 웹 애플리케이션의 한 형태로, 초기 로딩 시 단일 HTML 페이지를 로드한 후, 사용자 인터랙션에 따라 필요한 부분만 동적으로 업데이트하여 사용자 경험을 향상시킨다. 2003년 초부터 개념이 논의되었으며, Ajax, 웹 소켓, 서버 전송 이벤트 등 다양한 기술을 활용하여 서버와 통신한다. SPA는 자바스크립트 프레임워크(AngularJS, React, Vue.js 등)나 WebAssembly 기반 프레임워크를 사용하여 개발할 수 있으며, 씬 서버 아키텍처, Thick stateful/stateless server architecture 등 서버 아키텍처에 따라 구현 방식이 달라진다. 하지만, 검색 엔진 최적화(SEO), 브라우저 히스토리 관리, 초기 로딩 속도 지연, 보안 문제, 분석 도구 연동 등 해결해야 할 과제도 존재한다.

더 읽어볼만한 페이지

  • 웹 애플리케이션 - 구글 포토
    구글 포토는 사진 및 동영상 저장, 공유, 관리 기능을 제공하는 구글의 클라우드 기반 서비스로, 자동 분류, 얼굴 인식, 검색 기능을 제공하지만 2021년부터 무료 무제한 저장 용량 제공 정책이 변경되었고, 2024년에는 기술의 군사적 이용에 대한 윤리적 논란이 있었다.
  • 웹 애플리케이션 - 전자 상거래
    전자상거래는 컴퓨터 네트워크를 이용하여 상품이나 서비스를 사고파는 행위로, 웹, 이메일 등 다양한 전자적 매체를 통해 이루어지며, 소비자에게 편리함을, 기업에게는 시장 확장 기회를 제공하는 경제 활동이다.
싱글 페이지 애플리케이션
개요
유형웹 애플리케이션
상호 작용 방식웹 페이지 동적 재작성
특징
장점빠른 응답 속도
향상된 사용자 경험
서버 부하 감소
단점초기 로딩 시간 증가
검색 엔진 최적화(SEO) 어려움
JavaScript 의존성
보안 문제
기술 요소
주요 기술Ajax
JavaScript
HTML5
CSS3
프레임워크 및 라이브러리AngularJS
React
Vue.js
Svelte
역사
개발 배경웹 기술 발전 및 사용자 경험 향상 요구
초기 기술DHTML
접근 방식
라우팅클라이언트 측 라우팅
해시 기반 라우팅
상태 관리클라이언트 측 상태 관리
고려 사항
성능 최적화코드 분할
지연 로딩
캐싱
SEO 최적화서버 측 렌더링 (SSR)
프리렌더링
접근성웹 접근성 준수
예시
예시 애플리케이션Gmail
Google 지도
Twitter
Facebook
기타
같이 보기리치 인터넷 애플리케이션(RIA)

2. 역사

싱글 페이지 애플리케이션(SPA)이라는 용어의 기원은 명확하지 않으나, 이 개념은 적어도 2003년 초에 논의되었다.[33] 2002년 4월 스튜어트 모리스는 slashdotslash.com에서 자체 포함 웹사이트를 작성하였으며,[34] 같은 해에 루카스 비르도, 케빈 하크만, 마이클 피치, 에반 예가 미국 특허 8,136,109에 SPA 구현을 설명했다.[35] 초기에는 리치 웹 애플리케이션이라고 불리기도 했다.

3. 기술적 접근

SPA는 브라우저가 서버와 통신하면서도 단일 페이지를 유지할 수 있게 해주는 다양한 기술을 활용한다.

HTML 작성자는 HTML 문서의 서로 다른 섹션을 표시하거나 숨기기 위해 요소 ID를 활용할 수 있다. CSS를 사용하면, `:target` 가상 클래스 선택자를 통해 브라우저가 탐색한 페이지의 섹션만 표시하도록 할 수 있다.

페이지 전환 없이 서버와 통신하는 기술에는 다음과 같은 것들이 있다.


  • Ajax: 자바스크립트를 사용한 요청과 비동기 업데이트 기술을 통칭한다.
  • WebSocket: 양방향 소켓 통신을 가능하게 하는 프로토콜이다.
  • Server-sent events: 서버에서 클라이언트로의 전송을 가능하게 하는 HTTP 규격이다.
  • 브라우저 플러그인: Silverlight, 플래시, 자바 애플릿 등을 이용한 비동기 통신 (현재는 구식 기술이다).


데이터 전송 방식은 서버가 원시 데이터(XML 또는 JSON)나 새로운 HTML을 반환하는 두 가지 방식이 있다.[1] 서버에서 HTML이 반환되는 경우, 클라이언트의 JavaScript는 DOM의 일부 영역을 업데이트한다.[1] 원시 데이터가 반환될 때는 클라이언트 측 JavaScript를 사용하여 XML/XSL(JSON의 경우 템플릿) 처리 후 원시 데이터를 HTML로 변환한 다음, DOM의 일부 영역을 업데이트한다.[1]

SPA는 서버 아키텍처에 따라 다음과 같이 나눌 수 있다.

  • 씬 서버 아키텍처(Thin server architecture): 로직은 클라이언트 측에 두고, 서버는 순수한 데이터 API 또는 웹 서비스 역할을 수행한다.
  • 씩 스테이트풀 서버 아키텍처(Thick stateful server architecture): 서버가 클라이언트 상태를 메모리에 유지하며, 요청에 따라 HTML 및 JavaScript를 보내 클라이언트를 업데이트한다.
  • 씩 스테이트리스 서버 아키텍처(Thick stateless server architecture): 클라이언트가 상태를 서버로 전송하고, 서버는 이를 기반으로 필요한 데이터나 코드를 생성하여 클라이언트에 반환한다.

3. 1. 자바스크립트 프레임워크

AngularJS, Ember.js, ExtJS, Knockout.js, Meteor.js, React, Vue.js, Svelte와 같은 여러 자바스크립트 프레임워크 및 라이브러리들이 SPA 개발을 지원한다. 이러한 프레임워크들은 SPA의 원칙을 따르며, 개발자가 SPA를 효율적으로 만들 수 있도록 다양한 기능을 제공한다. 각 프레임워크는 모델-뷰-컨트롤러(MVC) 또는 모델-뷰-뷰모델(MVVM)과 같은 아키텍처 패턴을 기반으로 하며, 양방향 데이터 바인딩, 템플릿, 라우팅 등의 기능을 제공한다. ExtJS를 제외하고는 모두 무료이다.

  • AngularJS는 완전히 클라이언트 측 프레임워크이다. AngularJS의 템플릿은 양방향 UI 데이터 바인딩을 기반으로 한다. 데이터 바인딩은 모델이 변경될 때마다 보기를 자동으로 업데이트하고, 보기가 변경될 때마다 모델을 업데이트하는 자동적인 방법이다. HTML 템플릿은 브라우저에서 컴파일된다. 컴파일 단계는 순수한 HTML을 생성하며, 브라우저는 이를 라이브 보기로 다시 렌더링한다. 이 단계는 후속 페이지 보기마다 반복된다. 전통적인 서버 측 HTML 프로그래밍에서 컨트롤러 및 모델과 같은 개념은 서버 프로세스 내에서 상호 작용하여 새로운 HTML 보기를 생성하지만, AngularJS 프레임워크에서 컨트롤러 및 모델 상태는 클라이언트 브라우저 내에서 유지되므로 새로운 페이지는 서버와의 상호 작용 없이 생성될 수 있다.
  • Angular 2+는 AngularJS 이후 Google에서 개발한 SPA 프레임워크이다. Angular보다 여러 단계 앞서 있으며 이 프레임워크를 사용하는 강력한 개발자 커뮤니티가 있다. 프레임워크는 매년 두 번 업데이트된다. 현재 버전은 Angular 18.0.3 이며 새로운 기능과 수정 사항이 이 프레임워크에 자주 추가된다.
  • Ember.js모델-뷰-컨트롤러 (MVC) 소프트웨어 아키텍처 패턴을 기반으로 하는 클라이언트 측 자바스크립트 웹 애플리케이션 프레임워크이다. 개발자가 풍부한 객체 모델, 선언적 양방향 데이터 바인딩, 계산된 속성, Handlebars.js로 구동되는 자동 업데이트 템플릿 및 애플리케이션 상태 관리를 위한 라우터를 프레임워크에 통합하여 확장 가능한 단일 페이지 애플리케이션을 만들 수 있도록 한다.
  • ExtJS 또한 MVC 애플리케이션을 만들 수 있는 클라이언트 측 프레임워크이다. 자체 이벤트 시스템, 창 및 레이아웃 관리, 상태 관리 (저장소) 및 다양한 UI 구성 요소 (그리드, 대화 상자 창, 양식 요소 등)를 갖추고 있다. 동적 또는 정적 로더를 갖춘 자체 클래스 시스템을 가지고 있다. ExtJS로 구축된 애플리케이션은 자체적으로 (브라우저 내의 상태와 함께) 존재하거나 서버와 함께 (예: 내부 저장소를 채우는 데 사용되는 REST API와 함께) 존재할 수 있다. ExtJS는 localStorage를 사용할 수 있는 기능만 내장되어 있으므로 더 큰 애플리케이션에는 상태 저장을 위한 서버가 필요하다.
  • Knockout.js는 모델-뷰-뷰모델 패턴을 기반으로 하는 템플릿을 사용하는 클라이언트 측 프레임워크이다.
  • Meteor.js는 SPA 전용으로 설계된 풀 스택 (클라이언트-서버) 자바스크립트 프레임워크이다. Angular, Ember 또는 ReactJS보다 간단한 데이터 바인딩 기능을 제공하며,[5] 분산 데이터 프로토콜[6] 및 게시-구독 패턴을 사용하여 개발자가 동기화 코드를 작성할 필요 없이 데이터 변경 사항을 실시간으로 클라이언트에 자동으로 전파한다. 풀 스택 반응성은 데이터베이스에서 템플릿에 이르기까지 모든 계층이 필요할 때 자동으로 업데이트되도록 한다. ''서버 측 렌더링''[7]과 같은 생태계 패키지는 검색 엔진 최적화 문제를 해결한다.
  • React는 사용자 인터페이스를 구축하기 위한 자바스크립트 라이브러리이다. 페이스북(Facebook), 인스타그램(Instagram) 및 개인 개발자 및 기업의 커뮤니티에서 유지 관리한다. React는 JavaScript에 대한 구문 확장인 JSX를 사용하는데, 이는 JS와 HTML (HTML의 하위 집합)의 혼합이다. 일부 회사는 상태 관리 기능을 추가하는 Redux (JavaScript 라이브러리)와 함께 React를 사용하여 개발자가 복잡한 애플리케이션을 만들 수 있도록 한다.[8]
  • Vue.js는 사용자 인터페이스를 구축하기 위한 자바스크립트 프레임워크이다. Vue 개발자는 상태 관리를 위해 Pinia도 제공한다.
  • Svelte는 Svelte 코드를 자바스크립트 DOM (Document Object Model) 조작으로 컴파일하여 클라이언트에 프레임워크를 번들링할 필요가 없고 더 간단한 애플리케이션 개발 구문을 허용하는 사용자 인터페이스를 구축하기 위한 프레임워크이다.

3. 2. WebAssembly 기반 프레임워크

다음 프레임워크는 WebAssembly를 활용하거나 WebAssembly를 핵심 기술 또는 지원 메커니즘으로 사용하여 싱글 페이지 애플리케이션(SPA)을 구축할 수 있다. 이러한 프레임워크는 고성능의 대화형 클라이언트 측 개발을 가능하게 하여 SPA 패러다임을 여러 언어와 생태계로 확장한다.

  • Avalonia는 주로 크로스 플랫폼 데스크톱 UI 프레임워크이지만, WebAssembly에 대한 실험적 지원을 통해 SPA 개발에 사용할 수 있다. XAML 기반 UI 디자인과 네이티브 스타일 애플리케이션 기능을 갖추고 있다.
  • Blazor WebAssembly는 개발자가 C# 및 Razor 구문을 사용하여 SPA를 구축할 수 있도록 하는 .NET 기반 프레임워크이다. WebAssembly를 통해 브라우저에서 .NET 코드를 실행하여 JavaScript에 의존하지 않고도 풀 스택 .NET 개발 환경을 제공한다.
  • 웹용 Flutter는 Flutter의 크로스 플랫폼 개발 기능을 웹 기반 SPA로 확장한다. Dart와 Skia 그래픽 엔진을 사용하여 Flutter는 개발자가 브라우저에서 실행되는 시각적으로 풍부한 SPA를 만들 수 있도록 한다.
  • OpenSilver는 Silverlight의 또 다른 오픈 소스 재구현으로, C# 및 XAML로 개발된 SPA를 대상으로 한다. WebAssembly를 사용하여 브라우저에서 .NET 코드를 실행하므로 고도로 대화형 클라이언트 측 애플리케이션에 적합하다.
  • Uno Platform은 WebAssembly를 통해 SPA 개발을 지원하는 크로스 플랫폼 프레임워크이다. 개발자는 XAML 및 C#을 사용하여 웹, 모바일 및 데스크톱 플랫폼에서 실행되는 애플리케이션을 구축할 수 있으며, UI 구성 요소는 브라우저에서 직접 렌더링된다.

3. 3. Ajax

Ajax는 자바스크립트XMLHttpRequest 또는 더 현대적인 `fetch()` (2017년 이후)를 사용하여 서버에 XML 또는 JSON 데이터를 비동기적으로 요청하는 기술이다.[1] Ajax를 사용하면 웹사이트는 자바스크립트 또는 jQuery와 같은 자바스크립트 라이브러리를 직접 사용하여 DOM을 조작하고 HTML 요소를 편집한다. Ajax는 과거에 브라우저마다 다른 동작을 보였던 Ajax 동작을 단순화된 구문으로 제공하고 정규화하는 jQuery와 같은 라이브러리에 의해 더욱 대중화되었다.

3. 4. 웹 소켓

웹 소켓은 HTML 명세의 일부인 양방향 실시간 클라이언트-서버 통신 기술이다. 실시간 통신의 경우 성능[9]과 단순성 측면에서 Ajax보다 우수하다.

3. 5. 서버 전송 이벤트 (SSE)

서버 전송 이벤트(SSE)는 서버가 브라우저 클라이언트로 데이터 전송을 시작할 수 있는 기술이다. 초기 연결이 설정되면 클라이언트가 닫을 때까지 이벤트 스트림이 열린 상태로 유지된다. SSE는 기존 HTTP를 통해 전송되며 자동 재연결, 이벤트 ID, 임의의 이벤트를 전송하는 기능 등 웹 소켓이 설계상 갖추지 못한 다양한 기능을 제공한다.[10]

3. 6. 브라우저 플러그인 (현재는 구식)

과거에는 실버라이트, 플래시, 자바 애플릿과 같은 브라우저 플러그인 기술을 사용하여 서버에 비동기 호출을 수행하기도 했다. 이러한 방식은 현재 구식으로 간주된다.

3. 7. 데이터 전송

서버에 대한 요청은 일반적으로 원시 데이터(XML 또는 JSON)나 새로운 HTML을 반환한다.[1] 서버에서 HTML이 반환되는 경우, 클라이언트의 JavaScript는 DOM의 일부 영역을 업데이트한다.[1] 원시 데이터가 반환될 때는 종종 클라이언트 측 JavaScript를 사용하여 XML / XSL(JSON의 경우 템플릿) 처리 후 원시 데이터를 HTML로 변환한 다음, DOM의 일부 영역을 업데이트한다.[1]

3. 8. 서버 아키텍처

SPA는 서버 아키텍처에 따라 씬 서버 아키텍처(Thin server architecture)와 씩 스테이트풀/스테이트리스 서버 아키텍처(Thick stateful/stateless server architecture)로 나눌 수 있다.
씬 서버 아키텍처(Thin server architecture)는 로직을 클라이언트 측에 두고 서버는 순수한 데이터 API 또는 웹 서비스 역할을 수행한다. 복잡성이 서버에서 클라이언트로 이동했다는 점에서 씬 서버 아키텍처라고 불리기도 하지만, 시스템 전체의 복잡성이 감소했는지는 논란이 있다.
씩 스테이트풀 서버 아키텍처(Thick stateful server architecture)는 서버가 클라이언트 상태를 메모리에 유지하며, 요청에 따라 HTML 및 JavaScript를 보내 클라이언트를 업데이트한다. 대부분의 로직과 HTML은 서버에서 실행 및 렌더링된다. 이 방법은 서버 메모리와 처리 능력을 더 필요로 하지만, 애플리케이션이 보통 서버에서 완전히 코딩되고, 서버의 데이터와 UI 상태가 사용자 지정 클라이언트/서버 통신 브리지 없이 동일한 메모리 공간에서 공유되므로 개발 모델이 단순화되는 장점이 있다.
씩 스테이트리스 서버 아키텍처(Thick stateless server architecture)는 클라이언트가 상태를 서버로 전송하고, 서버는 이를 기반으로 필요한 데이터나 코드를 생성하여 클라이언트에 반환한다. 이 방식은 더 많은 데이터를 서버로 전송해야 하며, 서버에서 클라이언트 페이지 상태를 부분적으로 또는 완전히 재구성하기 위해 요청당 더 많은 계산 리소스가 필요할 수 있다. 하지만 서버에 클라이언트별 페이지 데이터가 보관되지 않으므로 더 쉽게 확장할 수 있다. 따라서 Ajax 요청은 세션 데이터 공유 또는 서버 선호도 없이 서로 다른 서버 노드로 분산될 수 있다.

4. 로컬 실행

일부 싱글 페이지 애플리케이션은 파일 URI 방식을 사용하여 로컬 파일에서 실행될 수 있다. 이를 통해 사용자는 서버에 접속하지 않고도 SPA를 서버에서 다운로드하여 로컬 저장 장치에서 파일을 실행할 수 있다. 이러한 SPA가 데이터를 저장하고 업데이트하려는 경우, 브라우저 기반의 웹 스토리지를 사용해야 한다.[11] HTML에서 제공되는 발전을 통해 이점을 얻는다.[11]

5. SPA 모델의 과제

SPA는 브라우저가 원래 설계된 무상태 페이지 다시 그리기 모델에서 진화했기 때문에 몇 가지 새로운 과제가 발생했다.[12] 이러한 과제는 다음을 통해 대처할 수 있다.

5. 1. 검색 엔진 최적화 (SEO)

웹 검색 엔진크롤러에서 자바스크립트 실행이 일부 지원되지 않아, 검색 엔진 최적화(SEO)는 싱글 페이지 애플리케이션(SPA) 모델을 사용하는 웹사이트에 역사적으로 문제를 안겨주었다.[17][18]

2009년부터 2015년까지 구글 웹마스터 중앙은 AJAX 페이지에 프래그먼트 식별자에서 느낌표를 사용하는 "AJAX 크롤링 방식"(#![19][20])을 제안했다. 이는 검색 엔진 크롤러가 관련 메타데이터를 추출할 수 있도록 SPA 사이트에서 특수 동작을 구현해야 하는 방식이었다. 그러나 이 방식은 여러 문제점이 지적되었고,[21] 2015년에 구글은 이 제안을 폐지했다.[22]

현재는 서버에서 첫 페이지 로드를 렌더링하고 클라이언트에서 후속 페이지 업데이트를 렌더링하는 방식을 사용할 수 있다. 또는 서버 측 렌더링, 정적 렌더링, 하이드레이션과 같은 방법을 통해 SEO 문제를 해결할 수 있다.[24]

SEO 호환성은 SPA에서 간단하지 않기 때문에, 검색 엔진 색인이 요구되거나 바람직한 상황에서는 일반적으로 SPA가 사용되지 않는다. 사용 사례로는 인증 시스템 뒤에 숨겨진 개인 데이터를 노출하는 애플리케이션이 있다.

5. 2. 브라우저 히스토리

단일 페이지 애플리케이션(SPA)은 "단일 페이지"이기 때문에 브라우저의 "뒤로" 및 "앞으로" 버튼을 사용한 페이지 기록 탐색 기능과 충돌한다. 사용자가 SPA 내에서 이전 화면 상태를 보기 위해 뒤로 가기 버튼을 눌렀을 때, 애플리케이션의 단일 페이지가 언로드되고 브라우저 기록의 이전 페이지가 표시되어 사용성에 문제가 생긴다.

이러한 문제를 해결하기 위한 전통적인 방법은 브라우저 URL의 해시 프래그먼트 식별자를 현재 화면 상태에 따라 변경하는 것이었다. 이는 자바스크립트를 사용하여 구현할 수 있으며, 브라우저 내에서 URL 기록 이벤트를 생성한다. SPA가 URL 해시에 포함된 정보로부터 동일한 화면 상태를 복원할 수 있다면, 예상되는 뒤로 가기 버튼 동작이 유지된다.

HTML 사양은 이 문제를 더욱 해결하기 위해 실제 URL 및 브라우저 기록에 대한 프로그래밍 방식 접근을 제공하는 [http://www.w3.org/html/wg/drafts/html/master/browsers.html#dom-history-pushstate pushState]와 [http://www.w3.org/html/wg/drafts/html/master/browsers.html#dom-history-replacestate replaceState]를 도입했다.

5. 3. 분석 (Analytics)

구글 애널리틱스와 같은 분석 도구는 브라우저에서 새로운 페이지가 로드될 때 작동하는 방식에 크게 의존하지만, SPA는 페이지 로드 없이 콘텐츠가 변경되므로 이 방식이 적합하지 않다.[26]

SPA에서는 첫 페이지 로드 후 모든 콘텐츠 변경이 애플리케이션 내부에서 처리되기 때문에, 분석 패키지를 업데이트하는 함수를 명시적으로 호출해야 한다. 이 함수를 호출하지 않으면 브라우저는 새로운 페이지 로드를 인식하지 못하고, 분석 도구는 사용자의 활동을 추적할 수 없다.[26]

HTML History API를 사용하면 SPA에 페이지 로드 이벤트를 추가하여 분석 도구와 통합할 수 있다. 하지만 이벤트를 정확하게 관리하고 누락이나 중복 없이 보고되도록 하는 것은 어려운 작업이다.[26]

일부 프레임워크는 주요 분석 제공 업체를 위한 무료 분석 통합 기능을 제공한다. 개발자는 이를 활용하여 애플리케이션에 분석 기능을 쉽게 통합할 수 있지만, 모든 것이 올바르게 작동하는지 확인해야 한다.[26]

5. 4. 보안

싱글 페이지 애플리케이션은 크로스-사이트 스크립팅(XSS)과 같은 전통적인 웹 페이지와 동일한 보안 위험에 노출될 뿐만 아니라, API를 통한 데이터 노출, 클라이언트 측 로직, 서버 측 보안의 클라이언트 측 시행 등과 같은 고유한 취약점도 가지고 있다.[27] 싱글 페이지 애플리케이션을 효과적으로 스캔하기 위해서는, DAST 도구 스캐너가 애플리케이션의 모든 영역을 검색하고, 애플리케이션이 원격 서버(예: API 요청)로 전송하는 모든 요청을 가로챌 수 있도록 신뢰할 수 있고 반복 가능한 방식으로 클라이언트 측 애플리케이션을 탐색할 수 있어야 한다.

5. 5. 초기 로딩 속도 지연

싱글 페이지 애플리케이션(SPA)은 뷰를 렌더링하기 전에 프레임워크와 애플리케이션 코드를 로드해야 하기 때문에 서버 기반 애플리케이션보다 첫 페이지 로딩이 느려지는 경향이 있다. 서버 기반 애플리케이션의 경우 필요한 HTML만 가져오면 되므로 통신 시간이 짧다.[26]

캐싱이나 지연 로드 모듈 등 SPA의 첫 로딩을 가속화하는 방법이 있다. 그러나 여전히 프레임워크와 애플리케이션 코드의 적어도 일부를 다운로드해야 하며, 많은 경우 브라우저에 무언가를 표시하기 위해 API를 통해 데이터를 가져와야 한다는 사실은 변하지 않는다. 이 성능과 대기 시간 문제는 "지금 지불할 것인가, 나중에 지불할 것인가"라는 트레이드 오프이며, 개발자가 결정해야 하는 것이다.[26]

6. 페이지 수명 주기

SPA는 초기 페이지 로드 시 완전히 로드되며, 요청 시 서버에서 로드된 새 페이지 조각으로 페이지 영역이 교체되거나 업데이트된다. 사용하지 않는 기능의 과도한 다운로드를 방지하기 위해 SPA는 종종 필요에 따라 페이지의 작은 조각이나 전체 화면 모듈과 같이 더 많은 기능을 점진적으로 다운로드한다.

이러한 방식으로 SPA의 "상태"와 기존 웹사이트의 "페이지" 사이에 유사성이 존재한다. 동일한 페이지 내의 "상태 탐색"이 페이지 탐색과 유사하기 때문에 이론적으로 모든 페이지 기반 웹사이트를 동일한 페이지에서 변경된 부분만 교체하는 단일 페이지로 변환할 수 있다.

웹의 SPA 방식은 단일 문서 인터페이스(SDI) 프레젠테이션 기술과 유사하며, 이는 네이티브 데스크톱 애플리케이션에서 널리 사용된다.

참조

[1] 서적 JavaScript - The Definitive Guide https://books.google[...] O'Reilly, Sebastopol, CA 2006
[2] 웹사이트 Inner-Browsing: Extending Web Browsing the Navigation Paradigm http://devedge.netsc[...] 2003-05-16
[3] 웹사이트 Slashdotslash.com: A self contained website using DHTML http://www.slashdots[...] 2012-07-06
[4] 웹사이트 US patent 8,136,109 https://patents.goog[...] 2002-04-12
[5] 웹사이트 Meteor Blaze https://github.com/m[...] 2022-05-06
[6] 블로그 Introducing DDP http://meteor.com/bl[...] 2012-03-21
[7] 웹사이트 Server Side Rendering for Meteor https://meteorhacks.[...] 2015-01-31
[8] 뉴스 Single-page applications vs. multiple-page applications: pros, cons, pitfalls - BLAKIT - IT Solutions https://blak-it.com/[...] BLAKIT - IT Solutions 2017-10-17
[9] 웹사이트 Real-Time Monitoring using AJAX and WebSockets http://www.computer.[...] 2016-06-01
[10] 웹사이트 Server-Sent Events http://www.w3.org/TR[...] W3C 2013-07-17
[11] 웹사이트 Unhosted web apps https://unhosted.org[...]
[12] 웹사이트 The Single Page Interface Manifesto http://itsnat.source[...] 2014-04-25
[13] 웹사이트 Derby http://derbyjs.com/ 2011-12-11
[14] 웹사이트 Sails.js https://github.com/b[...] 2013-02-20
[15] 웹사이트 Tutorial: Single Page Interface Web Site With ItsNat http://itsnat.source[...] 2011-01-13
[16] 문서 HTML5
[17] 웹사이트 What the user sees, what the crawler sees https://developers.g[...] 2014-01-06
[18] 웹사이트 Making Ajax Applications Crawlable https://developers.g[...] 2014-01-06
[19] 웹사이트 Proposal for making AJAX crawlable http://googlewebmast[...] Google 2011-07-13
[20] 웹사이트 (Specifications) Making AJAX Applications Crawlable https://developers.g[...] Google Inc. 2013-03-04
[21] 웹사이트 Hash URIs http://www.w3.org/QA[...] 2011-07-13
[22] 뉴스 Deprecating our AJAX crawling scheme https://webmasters.g[...] 2017-02-23
[23] 웹사이트 Implement dynamic rendering https://developers.g[...] 2021-01-07
[24] 웹사이트 Dynamic rendering as a workaround https://developers.g[...] 2024-07-02
[25] 웹사이트 Fix a single-page app for Google Search https://codelabs.dev[...] 2021-12-15
[26] 서적 Getting MEAN with Mongo, Express, Angular, and Node Manning Publications 2015
[27] 웹사이트 Single Page Applications (SPA) https://appcheck-ng.[...]
[28] 서적 JavaScript - The Definitive Guide O'Reilly, Sebastopol, CA 2006
[29] 웹사이트 AJAX クロールに関するスキームを廃止します https://webmaster-ja[...] 2017-06-10
[30] 서적 Getting MEAN with Mongo, Express, Angular, and Node Manning Publications 2015
[31] 서적 JavaScript - The Definitive Guide O'Reilly, Sebastopol, CA 2006
[32] 웹인용 Fixing the Back Button: SPA Behavior using Location Hash http://blog.falafel.[...] 2016-01-18
[33] 웹인용 Inner-Browsing: Extending Web Browsing the Navigation Paradigm https://developer.mo[...] 2011-02-03
[34] 웹인용 Slashdotslash.com: A self contained website using DHTML http://stu-rl.eu/sla[...] 2012-07-06
[35] 웹인용 US patent 8,136,109 https://www.google.c[...] 2002-04-12



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com