001: Svelte 소개 및 환경 설정

Svelte란?

Svelte는 웹 인터페이스를 구축하기 위한 프레임워크입니다. HTML, CSS, JavaScript로 작성된 선언적 컴포넌트를 최적화된 JavaScript 코드로 변환하는 컴파일러를 사용합니다.

Svelte 5는 Runes라는 새로운 반응성 시스템을 도입하여 더 명시적이고 강력한 상태 관리 방법을 제공합니다. $state, $derived, $effect와 같은 룬(Rune)을 사용하여 반응형 상태를 선언하고 관리할 수 있습니다.

실시간 예제: 인사하기

Svelte 5 인사하기

현재 이름: Svelte

컴포넌트 코드:

<script lang="ts">
  // Svelte 5의 반응형 상태 선언
  let name = $state<string>('Svelte');
  
  function greet(): void {
    alert(`환영합니다, ${name}!`);
  }
</script>

<div>
  <input 
    type="text" 
    bind:value={name} 
    placeholder="이름을 입력하세요"
  />
  <button onclick={greet}>
    인사하기
  </button>
</div>

Svelte 5의 Runes 시스템

Svelte 5는 Runes라는 새로운 반응성 시스템을 도입했습니다. Runes는 $로 시작하는 특별한 함수로, 컴파일러에게 반응성에 대한 힌트를 제공합니다.

실시간 예제: 카운터와 반응성

Svelte 5 카운터

0

두 배: 0

메시지: 카운터를 증가시켜보세요

컴포넌트 코드:

<script lang="ts">
  // 기본 상태 선언
  let count = $state<number>(0);
  
  // 파생 상태 (derived state)
  let doubled = $derived<number>(count * 2);
  let message = $derived<string>(
    count > 10 ? '카운터가 10을 초과했습니다!' : '카운터를 증가시켜보세요'
  );
  
  // 부수 효과 (side effects)
  $effect(() => {
    if (count === 5) {
      console.log('카운터가 5에 도달했습니다!');
    }
  });
  
  function increment(): void {
    count += 1;
  }
  
  function decrement(): void {
    if (count > 0) count -= 1;
  }
</script>

<div>
  <div class="flex items-center gap-4">
    <button onclick={decrement} disabled={count === 0}>-</button>
    <span>{count}</span>
    <button onclick={increment}>+</button>
  </div>
  <p>두 배: {doubled}</p>
  <p>메시지: {message}</p>
</div>

Svelte vs 다른 프레임워크

Svelte는 React, Vue, Angular와 같은 다른 프레임워크와 달리 런타임이 아닌 빌드 타임에 작동합니다. 이는 더 작은 번들 크기와 더 나은 성능을 제공합니다.

특징SvelteReactVue
번들 크기매우 작음중간중간
반응성컴파일러 기반가상 DOM프록시 기반
보일러플레이트최소많음중간
학습 곡선낮음중간중간

React vs Svelte 코드 비교:


// React 컴포넌트
import { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        Increment
      </button>
    </div>
  );
}

// Svelte 5 컴포넌트
<script>
  let count = $state(0);
</script>

<div>
  <p>Count: {count}</p>
  <button onclick={() => count++}>
    Increment
  </button>
</div>

개발 환경 설정

Svelte 프로젝트는 Vite를 사용하여 쉽게 설정할 수 있습니다. TypeScript와 Tailwind CSS를 함께 사용하면 더 강력한 개발 환경을 구축할 수 있습니다.

새 프로젝트 생성:


# Vite + Svelte + TypeScript 프로젝트 생성
npm create vite@latest my-svelte-app -- --template svelte-ts
cd my-svelte-app

# 의존성 설치
npm install

# Tailwind CSS 설치
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

# tailwind.config.js 설정
# content: ['./src/**/*.{svelte,html,js,ts}'] 추가

# src/app.css에 Tailwind 지시어 추가
# @tailwind base;
# @tailwind components;
# @tailwind utilities;

# 개발 서버 실행
npm run dev

tailwind.config.js:


/** @type {import('tailwindcss').Config} */
export default {
  content: ['./src/**/*.{svelte,html,js,ts}'],
  theme: {
    extend: {
      colors: {
        'svelte-orange': '#FF3E00',
        'svelte-dark': '#676778',
      }
    },
  },
  plugins: [],
}

Svelte의 특징

  • 컴파일 타임 프레임워크: 런타임이 아닌 빌드 타임에 최적화된 코드 생성
  • 적은 보일러플레이트: 간결한 코드 작성 가능
  • 진정한 반응성: 복잡한 상태 관리 없이 자동 UI 업데이트
  • 작은 번들 크기: 최적화된 코드로 빠른 로딩 시간
  • Runes 시스템: Svelte 5에서 도입된 명시적인 반응성 시스템
  • TypeScript 지원: 타입 안전성과 개발자 경험 향상
  • SvelteKit: 풀스택 애플리케이션 개발을 위한 프레임워크

실습 과제

  1. Vite와 Svelte를 사용하여 새 프로젝트를 생성해보세요.
  2. Tailwind CSS를 설정하고 간단한 스타일을 적용해보세요.
  3. $state, $derived, $effect를 사용하여 간단한 카운터 앱을 만들어보세요.
  4. VS Code 확장 프로그램을 설치하고 개발 환경을 최적화해보세요.

다음 강의 예고

다음 강의에서는 Svelte 컴포넌트의 기본 구조와 작성 방법에 대해 더 자세히 알아보겠습니다. 스크립트, 마크업, 스타일 섹션과 기본 문법을 배우게 됩니다.

© 2024 Coding Stairs. All rights reserved.