SPA 개발의 핵심: 자바스크립트 라우팅 기술 완전 정복
사용자 경험의 질은 페이지 전환 속도에서 결정됩니다. SPA의 핵심, 라우팅 기술을 제대로 익혀야 진짜 프론트엔드 개발자입니다!
안녕하세요, ICT리더 리치입니다. 프론트엔드 실무와 최신 트렌드에 집중하는 블로그에 오신 것을 환영합니다! 오늘은 싱글 페이지 애플리케이션(SPA)의 뼈대를 담당하는 "라우팅" 기술에 대해 깊이 있게 다뤄보려고 합니다. Vue Router, React Router, History API, Hash 방식 등 복잡하게만 느껴졌던 개념들을 초보자도 쉽게 이해할 수 있도록 설명드릴게요. 실무 예제와 함께 자바스크립트 기반 라우팅의 구조를 확실히 익히는 시간을 가져봅시다.
📌 바로가기 목차
| SPA 라우팅 구조를 기획 중인 여성 소프트웨어 엔지니어 |
1. SPA란 무엇인가요?
SPA(Single Page Application)는 하나의 HTML 파일에서 동적으로 콘텐츠를 렌더링하여 사용자가 페이지를 이동할 때마다 전체 페이지를 새로고침하지 않아도 되는 구조입니다. 기존 MPA(Multi Page Application)와 달리 브라우저의 주소가 바뀌더라도 화면은 동적으로 업데이트되며, 빠른 반응성과 부드러운 사용자 경험을 제공합니다.
SPA의 가장 핵심적인 요소가 바로 "라우팅(Routing)"입니다. 사용자의 URL 요청을 인터셉트하여 클라이언트에서 특정 컴포넌트를 렌더링하는 방식이죠.
2. 라우팅의 종류: Hash vs History
SPA에서 URL 처리를 위해 사용되는 두 가지 방식은 Hash 기반 라우팅과 History API 기반 라우팅입니다. 아래는 두 방식의 차이점입니다.
| 구분 | Hash 라우팅 | History API 라우팅 |
|---|---|---|
| URL 구조 | /#/about | /about |
| 브라우저 호환성 | 모든 브라우저 지원 | HTML5 지원 브라우저만 |
| 서버 설정 | 필요 없음 | 서버 리다이렉션 설정 필요 |
Hash 라우팅은 URL에 '#' 기호를 사용하고, History 라우팅은 브라우저의 History API를 활용합니다. 다음은 두 방식의 동작 차이를 보여주는 예시입니다.
//Hash 라우팅 예시
Home
About
//History 라우팅 예시
Home
About
3. 자바스크립트 라우터 라이브러리 비교
자바스크립트 기반 SPA에서는 다양한 라우팅 라이브러리를 활용할 수 있습니다. 다음은 대표적인 라우팅 라이브러리 비교입니다:
- React Router: 리액트 전용, 강력한 컴포넌트 기반 라우팅 구조
- Vue Router: Vue 3 공식 지원, Composition API 연계 우수
- Next.js: 파일 기반 자동 라우팅 + SSR 가능
- Navigo / Page.js: 순수 자바스크립트용 경량 라우팅
React Router, Vue Router 등 주요 라이브러리의 사용 방식 차이를 예제로 비교해봅니다.
// React Router 예시 (v6 기준)
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
function App() {
return (
} />
} />
);
}
// Vue Router 예시
import { createRouter, createWebHistory } from 'vue-router';
import Home from './views/Home.vue';
import About from './views/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
![]() |
| SPA 라우팅 발표 중인 전문가 여성 개발자 인포그래픽 |
4. React Router 실전 적용법
React에서는 react-router-dom 라이브러리를 사용하여 라우팅을 처리합니다. BrowserRouter, Routes, Route 컴포넌트를 사용해 각 경로에 컴포넌트를 바인딩합니다.
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Home from './Home';
import About from './About';
function App() {
return (
} />
} />
);
}
React Router를 활용한 기본적인 네비게이션 구성 예시입니다.
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function Home() {
return 홈 페이지
;
}
function About() {
return 소개 페이지
;
}
function NotFound() {
return 404 페이지를 찾을 수 없습니다
;
}
function App() {
return (
} />
} />
} />
);
}
5. Vue Router 핵심 개념과 예제
Vue 3에서는 Vue Router 4를 활용하여 createRouter와 createWebHistory를 통해 라우팅 구성을 정의합니다.
| 구성 요소 | 역할 |
|---|---|
| createRouter | 라우터 객체 생성 |
| createWebHistory | HTML5 History API 사용 |
| routes | 경로와 컴포넌트 매핑 |
Vue.js에서 Vue Router를 사용하여 페이지를 전환하는 기본 구성입니다.
// main.js
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
createApp(App).use(router).mount('#app');
// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
];
const router = createRouter({
history: createWebHistory(),
routes
});
export default router;
6. 라우팅 성능 최적화 Best Practices
SPA의 성능을 높이기 위해서는 라우트 단위의 코드 스플리팅과 지연 로딩이 필수입니다.
사용자가 접근하는 시점에만 해당 페이지의 코드를 불러오면 초기 로딩 속도를 크게 개선할 수 있습니다.
- 코드 스플리팅 (React.lazy, Vue defineAsyncComponent 등 사용)
- 라우팅 경로 최소화 및 명확한 계층 구조 설계
- SSR 또는 SSG 도입 검토 (Next.js, Nuxt 등)
- 중복 경로 제거 및 Redirect 처리 간결화
- 404, 인증 등 공통 페이지 라우팅 모듈화
코드 스플리팅과 지연 로딩을 통한 라우팅 성능 최적화 예제입니다.
// React - lazy load with React Router
import React, { Suspense, lazy } from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
const Home = lazy(() => import('./pages/Home'));
const About = lazy(() => import('./pages/About'));
function App() {
return (
<BrowserRouter>
<Suspense fallback={<div>로딩 중...</div>}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</Suspense>
</BrowserRouter>
);
}
![]() |
| React 및 Vue 라우터 구조를 확인하는 남성 개발자의 인포그래픽 |
7. 자주 묻는 질문 (FAQ)
SPA는 초기 페이지 렌더링이 JavaScript에 의존하기 때문에 SEO에 불리합니다. SSR(서버 사이드 렌더링)이나 Prerendering을 적용하여 해결할 수 있습니다.
라우터가 history 모드를 사용할 경우 서버에서 모든 경로를 index.html로 리디렉션하도록 설정하지 않으면 새로고침 시 404 에러가 발생합니다.
Route 안에 또 다른 Route를 정의하거나 Outlet 컴포넌트를 활용하여 중첩된 UI 구성을 처리할 수 있습니다.
<transition> 태그를 활용하여 라우트 변경 시 트랜지션 효과를 줄 수 있으며, CSS 또는 Vue의 transition 클래스와 함께 적용합니다.
정적 라우팅은 고정된 URL에 특정 컴포넌트를 바인딩하는 방식이고, 동적 라우팅은 URL 파라미터를 이용해 동적으로 라우트를 처리합니다.
8. 마무리 요약
✅ SPA 라우팅, 프론트엔드 개발의 기본 뼈대를 완성하다
자바스크립트 SPA에서 라우팅은 단순한 URL 이동이 아닌 사용자 경험의 핵심입니다.
React Router와 Vue Router를 비교 분석하고, 각각의 실제 예제 코드를 살펴보며 핵심 로직을 이해하셨을 겁니다.
Hash 방식과 History API의 차이도 직접 테이블로 정리해보았고,
마지막으로 라우팅 성능을 위한 실전 최적화 팁까지 정리했죠.
이 글을 기반으로 여러분도 실무에서 강력한 SPA 라우팅을 구축할 수 있길 바랍니다.
여러분의 앱, 지금보다 더 빠르고 더 부드러워질 수 있습니다!


댓글
댓글 쓰기