🧭 SvelteKit μ™„μ „ 초보자 κ°€μ΄λ“œ (2025 버전)

1️⃣ SvelteKitμ΄λž€?

SvelteKit은 Svelteλ₯Ό 기반으둜 ν•œ μ°¨μ„ΈλŒ€ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€.
React의 Next.js, Vue의 Nuxt.js처럼 SSR(μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§), SSG(정적 μ‚¬μ΄νŠΈ 생성), SPA(Single Page App), API λΌμš°νŒ…, 동적 νŽ˜μ΄μ§€λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

πŸ§ƒ νŠΉμ§• μš”μ•½

κΈ°λŠ₯μ„€λͺ…
βœ… μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§(SSR)검색 μ—”μ§„ μΉœν™”μ μΈ μ•± μ œμž‘ κ°€λŠ₯
βœ… 정적 μ‚¬μ΄νŠΈ 생성(SSG)λΉ λ₯΄κ³  μ•ˆμ „ν•œ 정적 배포 지원
βœ… 파일 기반 λΌμš°νŒ…λ””λ ‰ν† λ¦¬ ꡬ쑰둜 URL μžλ™ 생성
βœ… API 라우트 λ‚΄μž₯λ°±μ—”λ“œ 없이도 μ„œλ²„ ν•¨μˆ˜ κ΅¬ν˜„ κ°€λŠ₯
βœ… λΉ λ₯Έ λ²ˆλ“€λ§Vite 기반 μ΄ˆκ³ μ† 개발 μ„œλ²„ μ‚¬μš©

2️⃣ 개발 ν™˜κ²½ μ„ΈνŒ…

πŸ“Œ Node.js μ„€μΉ˜

πŸ“¦ SvelteKit ν”„λ‘œμ νŠΈ 생성

npx sv create my-app
cd my-app
npm install
npm run dev
  • npm run dev λͺ…λ ΉμœΌλ‘œ 개발 μ„œλ²„ μ‹€ν–‰
  • http://localhost:5173μ—μ„œ μ•± 확인

ν”„λ‘œμ νŠΈ ν…œν”Œλ¦Ώ 선택 μ‹œ

  • Skeleton Project (κΈ°λ³Έ ν…œν”Œλ¦Ώ)
  • Demo App (예제 포함, ꡬ쑰 νŒŒμ•…μ— 도움 됨)

3️⃣ 디렉토리 ꡬ쑰 이해

my-app/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ routes/           # νŽ˜μ΄μ§€ λΌμš°νŒ…
β”‚   β”‚   └── +page.svelte  # "/" 메인 νŽ˜μ΄μ§€
β”‚   β”‚   └── about/+page.svelte
β”‚   β”œβ”€β”€ lib/              # 곡톡 μ»΄ν¬λ„ŒνŠΈ 및 μœ ν‹Έ
β”‚   β”œβ”€β”€ app.html          # HTML ν…œν”Œλ¦Ώ
β”œβ”€β”€ static/               # 정적 파일 (favicon, 이미지 λ“±)
β”œβ”€β”€ svelte.config.js      # μ„€μ • 파일

πŸ”Έ routes/ 폴더가 λΌμš°νŒ…μ˜ μ€‘μ‹¬μž…λ‹ˆλ‹€.
πŸ”Έ +page.svelte, +page.ts, +server.ts, +layout.svelte λ“±μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.


4️⃣ νŽ˜μ΄μ§€ λΌμš°νŒ…

SvelteKit은 파일과 폴더 μ΄λ¦„λ§ŒμœΌλ‘œ URL 경둜λ₯Ό μžλ™μœΌλ‘œ λ§€ν•‘ν•©λ‹ˆλ‹€.

파일 κ΅¬μ‘°λΈŒλΌμš°μ € 경둜
/routes/+page.svelte/
/routes/about/+page.svelte/about
/routes/blog/[slug]/+page.svelte/blog/hello-world

πŸ§ͺ 예제

src/routes/about/+page.svelte

<script>
  let name = 'SvelteKit';
</script>

<h1>About {name}</h1>

5️⃣ 데이터 λ‘œλ”©

SvelteKit은 μ„œλ²„μ—μ„œ 데이터λ₯Ό λ¨Όμ € λΆˆλŸ¬μ™€ νŽ˜μ΄μ§€μ— 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.

🧾 예제: load ν•¨μˆ˜ μ‚¬μš©

// src/routes/+page.ts
export function load() {
  return {
    name: 'Yeongjin',
    age: 30
  };
}
<script>
  export let data;
</script>

<h1>{data.name} λ‹˜μ˜ λ‚˜μ΄λŠ” {data.age}μ„Έμž…λ‹ˆλ‹€</h1>

load() ν•¨μˆ˜λŠ” SSR, CSR ν™˜κ²½ λͺ¨λ‘μ—μ„œ λ™μž‘ν•©λ‹ˆλ‹€.


6️⃣ API 라우트 λ§Œλ“€κΈ°

λ°±μ—”λ“œ 없이도 REST APIλ₯Ό SvelteKit으둜 κ΅¬ν˜„ν•  수 μžˆμ–΄μš”.

// src/routes/api/hello/+server.ts
export function GET() {
  return new Response('μ•ˆλ…•ν•˜μ„Έμš”, μ§„μ΄μž…λ‹ˆλ‹€!');
}
  • /api/hello 경둜둜 GET μš”μ²­ β†’ μœ„ 응닡을 λ°˜ν™˜
  • JSON 응닡도 κ°€λŠ₯: return json({ message: "Hi" })

7️⃣ 폼 처리: Actions

μ„œλ²„μ—μ„œ 폼을 μ²˜λ¦¬ν•˜λŠ” κΈ°λŠ₯도 맀우 κ°„νŽΈν•©λ‹ˆλ‹€.

<!-- src/routes/contact/+page.svelte -->
<form method="POST">
  <input name="message" />
  <button type="submit">보내기</button>
</form>
// src/routes/contact/+page.server.ts
export const actions = {
  default: async ({ request }) => {
    const formData = await request.formData();
    const message = formData.get('message');
    console.log('μ‚¬μš©μž λ©”μ‹œμ§€:', message);
    return { success: true };
  }
};

8️⃣ μŠ€νƒ€μΌλ§

κΈ°λ³Έ CSS κ°€λŠ₯

<style>
  h1 {
    color: red;
  }
</style>

Tailwind CSS 연동 (많이 씀)

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init tailwind.config.cjs -p

tailwind.config.cjs:

content: ["./src/**/*.{html,js,svelte,ts}"],

src/app.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

svelte.config.js에 μΆ”κ°€:

preprocess: [
  import('svelte-preprocess')({ postcss: true })
],

9️⃣ λΉŒλ“œμ™€ 배포

정적 μ‚¬μ΄νŠΈλ‘œ λΉŒλ“œ

npm run build
npm run preview

Node μ„œλ²„λ‘œ μ‹€ν–‰

npm run build
node build

Vercel에 배포

npm i -g vercel
vercel

πŸ”Ÿ μΆ”μ²œ ν•™μŠ΅ 자료

  • πŸ“˜ 곡식 νŠœν† λ¦¬μ–Ό: https://learn.svelte.dev
  • πŸ“˜ SvelteKit λ¬Έμ„œ: https://kit.svelte.dev/docs
  • πŸ“Ί 유튜브: The Net Ninja의 SvelteKit κ°•μ’Œ
  • πŸ§ͺ μ‹€μŠ΅ 예제: Todo μ•±, λΈ”λ‘œκ·Έ, 포트폴리였 λ“±

🎁 μΆ”κ°€ 팁

νŒμ„€λͺ…
πŸ”„ hot reload개발 쀑 μžλ™ 반영
πŸ” DevToolsSvelte for Chrome μ„€μΉ˜ μΆ”μ²œ
πŸ“ ꡬ쑰화/lib/components, /lib/stores λ“± ν΄λ”λ‘œ μ»΄ν¬λ„ŒνŠΈ 관리

βœ… 마무리: μ–΄λ–€ μ•± λ§Œλ“€κ³  μ‹ΆμœΌμ‹ κ°€μš”?

SvelteKit은 정말 직관적이고 λΉ λ¦…λ‹ˆλ‹€.
κ°„λ‹¨ν•œ 포트폴리였 μ‚¬μ΄νŠΈλΆ€ν„° λΈ”λ‘œκ·Έ, κ΄€λ¦¬μž νŽ˜μ΄μ§€, 챗봇 μΈν„°νŽ˜μ΄μŠ€, AI 기반 ν”„λ‘ νŠΈμ—”λ“œκΉŒμ§€ λ§Œλ“€ 수 μžˆμ–΄μš”.


λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€