Next.js Pages router, App router & SvelteKit routes

Intro

최근에 Sveltekit + Phoenix 조합으로 사이드 프로젝트[1]를 하나 만들고 있습니다.
회사에서도 Next.js 13으로 버전업하면서 Pages router 에서 App router로 점진적으로 마이그레이션을 하고 있고, 새로운 기술스택 Sveltekit의 routes 방식을 비교해보려고 합니다.

세 가지 라우팅 방식 다 공식 문서에 아주 자세히 설명되어 있어서 따라가면서 배우기 좋은데 비슷한 점도 많고 다른 점도 있어서 각각 보기보다는 서로 비교하면서 이해하면 더 도움이 될 것 같아 정리해보기로 했습니다.

Next.js Pages Router

pages/home/page.js -> `/home`
pages/logs/page.js -> `/logs`
pages/logs/[slug]/page.js -> `/logs/1` , `logs/2`, `logs/digital-garden-logs`
pages/shop/[...slug].js -> `/pages/shop/clothes`, `/pages/shop/clothes/tops` , `pages/shop/clothes/tops/t-shirts`
pages/shop/[[...slug]].js -> `/pages/shop`, `/pages/shop/clothes`, , `/pages/shop/clothes/tops` , `pages/shop/clothes/tops/t-shirts`

Next.js App Router

app/home/page.js -> `/home`
app/logs/page.js -> `/logs`

SvelteKit routes

src/routes/+page.svelte -> `/`
src/routes/logs/+page.svelte -> `/logs`
src/routes/home/+page.svelte -> `/home`
arc/routes/logs/[slug]/+page.svelte -> `/logs/digital-garden-log`

Outro

사이드 프로젝트 초기 스트럭쳐를 잡기로 하면서 SvelteKit 기본 구조와 Nextjs 라우팅 구조와 자연스럽게 비교하게 됐습니다. 공부도 할겸 간단하게 세 가지 라우팅 방식을 비교 정리해봤습니다. 각자 다르면서 닮은 방식을 가지고 있는데, 특히나 App router와 SvelteKit의 라우팅 방식이 멘탈모델이 비슷한 결을 가지고 있다는 느낌을 받았네요. 더 자세한 스펙과 라우팅 - data fetching, error, pre-render, optimization, middleware... - 에 관해서는 나중에 다른 포스트로 또 다뤄보도록 하겠습니다.
Screen Shot 2024-09-01 at 9.42.40 PM.png


  1. sqetch.club ↩︎

  2. https://kit.svelte.dev/docs/glossary#hydration ↩︎

  3. https://github.com/sveltejs/kit/blob/108cb127eb0a4c3655aeff1f749bcbd98b70324e/packages/create-svelte/templates/default/src/routes/sverdle/%2Bpage.server.ts#L29-#L49 ↩︎

  4. https://github.com/sveltejs/kit/blob/108cb127eb0a4c3655aeff1f749bcbd98b70324e/packages/create-svelte/templates/default/src/routes/sverdle/%2Bpage.svelte#L60-#L76 ↩︎