0331

FE

[SvelteKit] 페이지 이동 방법

| 서론

이번 포스팅에서는 Svelte(SvelteKit)에서 페이지 이동(라우팅)에 대해서 알아보려고 합니다.

Svelte(특히 SvelteKit)에서는 페이지 이동(라우팅)이 기본적으로 '내장'되어 있어서, 별도의 react-router나 vue-router과 같은 패키지를 설치할 필요가 없습니다.

그럼, 어떻게 페이지를 이동하는지 정리해봅시다!

| 기본 개념 : 파일 시스템 기반 라우팅

SvelteKit에서는 src/routes 폴더의 파일 구조가 URL 구조입니다.

TypeScript
src/routes/
├── +page.svelte          →  /
├── about/
│   └── +page.svelte      →  /about
└── posts/
    ├── +page.svelte      →  /posts
    └── [id]/
        └── +page.svelte  →  /posts/123

이렇게만 폴더를 구성하면 자동으로 페이지 라우팅이 됐습니다.

즉, /about으로 들어가면 about/+page.svelte가 자동으로 렌더링됩니다.

| 페이지 간 이동 방법

페이지 간 이동 방법을 위해서는 다양한 방법들이 있었는데요? 하나씩 살펴보면 다음과 같습니다.

1) <a> 태그를 사용

HTML
<a href="/about">About 페이지로 이동</a>
  • SvelteKit은 내부적으로 <a>를 감지해서 클라이언트 사이드 네비게이션으로 처리합니다.

  • 즉, 전체 새로고침 없이 부드럽게 이동됩니다.

2) goto() 함수 사용 (스크립트 내에서 이동)

: 페이지 이동을 코드로 제어하고 싶을 때 goto() 함수를 사용할 수 있습니다.

HTML
<script lang="ts">
	import { goto } from '$app/navigation';

	function moveToAbout() {
		goto('/about');
	}
</script>

<button on:click={moveToAbout}>About 페이지로 이동</button>

마치, goto('/about')는 React의 useNavigate('/about') 혹은 Next.js의 router.push('/about')와 같은 역할이라고 볼 수 있습니다.

3) 파라미터가 있는 동적 라우팅

: 예를 들어 /posts/[id] 구조일 때:

code
// src/routes/posts/[id]/+page.svelte
<script>
	export let params; // { id: '123' }
</script>

<h1>게시글 ID: {params.id}</h1>

이동은 아래처럼 가능합니다:

HTML
<a href="/posts/123">게시글 123 보기</a>
<!-- 또는 -->
<button on:click={() => goto('/posts/123')}>123번 글 보기</button>