SPA
기본 정보
- 명칭: SPA
- 영문명: Single Page Application
- 한글명: 단일 페이지 애플리케이션
- 분류: 웹 애플리케이션 아키텍처
- 주요 용도: 빠른 사용자 경험 제공
- 관련 주제: #SPA #React #Vue #JavaScript #프론트엔드
개요
SPA(Single Page Application)는 최초 한 번만 웹페이지를 로드한 뒤, 이후에는 필요한 데이터만 서버와 통신하여 화면을 동적으로 변경하는 웹 애플리케이션 방식이다.
기존 웹사이트처럼 페이지 전체를 새로고침하지 않고 필요한 부분만 변경하기 때문에 앱과 같은 자연스러운 사용자 경험을 제공할 수 있다.
React, Vue.js, Angular 등 대부분의 현대 프론트엔드 프레임워크가 SPA 방식을 기반으로 동작한다.
SPA 구조
사용자
↓
브라우저
↓
SPA(App)
↓
REST API
↓
백엔드 서버
↓
Database
↓
JSON
↓
화면 갱신
동작 방식
최초 접속
↓
HTML + CSS + JavaScript 다운로드
↓
SPA 실행
↓
사용자 클릭
↓
API 요청
↓
JSON 응답
↓
화면 일부 업데이트
페이지 전체를 다시 불러오지 않는다.
기존 웹과 비교
MPA(Multi Page Application)
페이지 이동
↓
서버 요청
↓
새 HTML 생성
↓
브라우저 렌더링
SPA
페이지 이동
↓
JavaScript 실행
↓
API 호출
↓
화면 일부 변경
주요 특징
- 페이지 새로고침 최소화
- 빠른 화면 전환
- 앱과 유사한 사용자 경험
- API 중심 구조
- 프론트엔드와 백엔드 분리
- 컴포넌트 재사용 가능
대표 기술
API 통신
SPA는 대부분 REST API를 이용한다.
GET /api/users
응답
{
"name": "구름",
"age": 30
}
라우팅
SPA는 JavaScript가 화면 이동을 처리한다.
예시
/home
/user
/admin
/product
실제로는 페이지 이동 없이 화면만 변경된다.
React Router
<Route
path="/user"
element={<User />}
/>
Vue Router
createRouter({
routes:[]
})
상태 관리
SPA에서는 화면 간 데이터를 공유하기 위해 상태 관리 라이브러리를 사용한다.
대표 기술
- Redux
- Zustand
- Context API
- Pinia
- Vuex
장점
- 빠른 화면 전환
- 사용자 경험 향상
- 서버 부하 감소
- 프론트엔드와 백엔드 분리
- 컴포넌트 재사용 가능
- 모바일 앱과 유사한 느낌 제공
단점
- 초기 로딩 속도가 느릴 수 있음
- SEO 대응이 어려울 수 있음
- JavaScript 의존도가 높음
- 번들 크기가 커질 수 있음
SEO 문제
SPA는 JavaScript 실행 후 화면이 생성되므로 검색 엔진 최적화(SEO)에 불리할 수 있다.
이를 해결하기 위해 SSR(Server Side Rendering) 또는 SSG(Static Site Generation)를 사용하는 경우가 많다.
대표 기술
SSR과 비교
| SPA | SSR |
|---|---|
| 클라이언트 렌더링 | 서버 렌더링 |
| 초기 로딩 다소 느림 | 초기 로딩 빠름 |
| 화면 전환 빠름 | 페이지 요청 필요 |
| SEO 약함 | SEO 강함 |
| React, Vue | Next.js, Nuxt |
SPA 폴더 구조 예시
src/
├── components/
├── pages/
├── router/
├── stores/
├── hooks/
├── services/
├── assets/
└── App
주요 활용 분야
- 관리자 페이지
- ERP
- CRM
- SaaS
- 쇼핑몰
- 대시보드
- 커뮤니티
- 프로젝트 관리 시스템
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 컴포넌트 단위 개발
- API 중심 구조
- TypeScript 적용
- Lazy Loading 적용
- Code Splitting 적용
- 상태 관리 라이브러리 활용
- Axios 또는 Fetch 사용
- JWT 인증 적용
- 환경 변수 분리
- 에러 처리 공통화
SPA와 함께 사용하는 기술
대표 개발 도구
- Visual Studio Code
- Chrome DevTools
- Vite
- npm
- pnpm
- Postman
관련 문서
출처
- MDN Web Docs
- web.dev
- React 및 Vue 공식 문서