모던 웹 개발에서 페이지 간 이동을 처리하는 방법은 크게 두 가지로 나뉩니다: 서버 라우팅과 클라이언트 라우팅.
이 두 접근 방식은 웹 애플리케이션의 성능, 사용자 경험, 개발 방식에 큰 영향을 미칩니다.
오늘은 두 라우팅 방식의 차이점과 각각의 장단점을 살펴보겠습니다.
서버 라우팅은 전통적인 웹 개발 방식으로, 사용자가 URL을 요청할 때마다 서버가 해당 URL에 맞는 HTML 페이지를 새로 생성하여 클라이언트에게 전송합니다.
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send(`
<html>
<head><title>홈페이지</title></head>
<body>
<h1>홈페이지입니다</h1>
<a href="/about">소개 페이지로 이동</a>
</body>
</html>
`);
});
app.get('/about', (req, res) => {
res.send(`
<html>
<head><title>소개 페이지</title></head>
<body>
<h1>소개 페이지입니다</h1>
<a href="/">홈으로 돌아가기</a>
</body>
</html>
`);
});
app.listen(3000);
클라이언트 라우팅은 SPA(Single Page Application) 개발에서 주로 사용되는 방식으로, 초기에 필요한 JavaScript 코드를 모두 다운로드한 후 페이지 전환을 JavaScript로 처리합니다.
import { BrowserRouter, Routes, Route, Link } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<nav>
<Link to="/">홈</Link>
<Link to="/about">소개</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
function Home() {
return <h1>홈페이지입니다</h1>;
}
function About() {
return <h1>소개 페이지입니다</h1>;
}
| 특성 | 서버 라우팅 | 클라이언트 라우팅 |
|---|---|---|
| 페이지 로드 | 매 요청마다 전체 페이지 새로고침 | 첫 로드 후 부분적 업데이트만 |
| 서버 요청 | 페이지 전환마다 서버 요청 발생 | 데이터만 필요할 때 API 요청 |
| 초기 로딩 속도 | 일반적으로 빠름 (첫 페이지만 로드) | 상대적으로 느림 (전체 앱 로드) |
| 페이지 전환 속도 | 느림 (전체 페이지 다시 로드) | 빠름 (DOM 조작만 발생) |
| 백엔드 의존성 | 높음 (모든 라우팅 서버에서 처리) | 낮음 (대부분 프론트엔드에서 처리) |
| 브라우저 리소스 | 적게 사용 | 많이 사용 |
| 개발 복잡성 | 상대적으로 단순 | 상대적으로 복잡 |
클라이언트 라우팅을 사용하는 SPA의 경우, 모든 경로를 메인 HTML 파일로 리다이렉트하도록 웹서버를 설정해야 합니다. 이렇게 하면 사용자가 URL을 직접 입력하거나 새로고침을 해도 404 오류가 발생하지 않습니다.
server {
listen 80;
server_name example.com;
root /var/www/html;
location / {
try_files $uri $uri/ /index.html;
}
}
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>
최근에는 두 방식의 장점을 결합한 하이브리드 접근법이 인기를 끌고 있습니다:
SSR(Server-Side Rendering) + 하이드레이션:
정적 사이트 생성(SSG) + 클라이언트 라우팅:
서버 라우팅과 클라이언트 라우팅은 각각 고유한 장단점을 가지고 있습니다. 프로젝트의 요구사항, 대상 사용자, 개발 리소스에 따라 적절한 방식을 선택하는 것이 중요합니다.
현대 웹 개발에서는 Next.js, Nuxt.js와 같은 프레임워크를 통해 두 접근 방식의 장점을 결합한 하이브리드 방식이 많이 사용되고 있습니다. 이를 통해 SEO, 초기 로딩 속도, 그리고 부드러운 사용자 경험을 모두 확보할 수 있습니다.
어떤 방식을 선택하든, 웹 개발자로서 각 라우팅 방식의 원리와 장단점을 이해하는 것은 더 나은 웹 애플리케이션을 구축하는 데 큰 도움이 될 것입니다.