서버와 클라이언트에서 구성하는 라우팅의 비교 (Difference between Server-side Routing and Client-side Routing)

1 분 소요

서버와 클라이언트에서 구성하는 라우팅의 비교 입니다.


차이점

Server-side (서버 측): 서버에서 라우팅을 처리하기 때문에 사용자가 해당 페이지에 직접 접근하는 방식입니다. 즉, 웹 페이지 요청이 서버에 도달하면 서버에서 해당 페이지를 렌더링하고 클라이언트에게 반환합니다.

Client-side (클라이언트 측): 클라이언트 내부에서 라우팅을 처리하기 때문에 해당 페이지를 호출할 때 루트(root)에서 시작하여 해당 페이지까지 차례로 로딩합니다. 즉, 웹 애플리케이션이 로드된 후에 클라이언트 측에서 라우팅을 담당합니다.


유사점

Server-side (서버 측): ASP.NET MVC의 View Layout을 활용하면 클라이언트 측 라우팅과 유사한 방식으로 View를 겹쳐서 사용할 수 있습니다. 그러나 이 경우 모듈 간 구분이 없으며, 레이아웃은 단순히 뷰(View)의 역할을 하며 해당 컨트롤러가 없습니다.

Client-side (클라이언트 측): 각각의 레이아웃(Layout)도 컴포넌트(Component)를 가지며 독립적인 기능을 제공합니다. 이것은 클라이언트 측에서 모듈화 및 구성성을 더 잘 활용할 수 있음을 의미합니다.

주의사항

Server-side (서버 측): 원하는 페이지로 강제로 이동하려면 반드시 라우팅을 사용해야 합니다. 클라이언트 측과 달리 서버가 페이지 렌더링을 제어하므로 서버 라우팅을 적용해야 합니다.

Client-side (클라이언트 측): 하위 페이지를 호출할 때 해당 컴포넌트의 부모 컴포넌트를 반드시 거쳐야 합니다. 따라서 설계 시에 이 점을 유의해야 합니다.

라우팅(Server-side vs. Client-side) 비교

라우팅은 서버와 클라이언트 간의 웹 페이지 내비게이션을 다루는 중요한 주제입니다. 두 가지 주요 접근 방식을 비교해 보겠습니다.

서버 측 라우팅(Server-side Routing)

서버 측 라우팅은 서버에서 라우팅을 처리하는 방식입니다. 예를 들어, 사용자가 웹 페이지에 접근하면 서버에서 해당 페이지를 렌더링하고 클라이언트에게 반환합니다. 다음은 Node.js와 Express.js를 사용한 간단한 서버 측 라우팅 예제 코드입니다.

const express = require('express');
const app = express();

// 루트 경로에 대한 핸들러
app.get('/', (req, res) => {
  res.send('홈 페이지');
});

// '/about' 경로에 대한 핸들러
app.get('/about', (req, res) => {
  res.send('소개 페이지');
});

app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행 중입니다.');
});

클라이언트 측 라우팅(Client-side Routing)

클라이언트 측 라우팅은 웹 애플리케이션이 로드된 후 클라이언트 측에서 라우팅을 처리하는 방식입니다. 주로 JavaScript 프레임워크(예: Angular, React, Vue.js)를 사용하여 구현됩니다.

// app-routing.module.ts 파일에서 라우트 설정을 추가합니다.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home.component';
import { AboutComponent } from './about.component';

const routes: Routes = [
  { path: '', component: HomeComponent },
  { path: 'about', component: AboutComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
})
export class AppRoutingModule {}
<!-- app.component.html -->
<nav>
  <ul>
    <li><a routerLink="/"></a></li>
    <li><a routerLink="/about">소개</a></li>
  </ul>
</nav>

<router-outlet></router-outlet>

댓글남기기