2. 개발 환경 설정
Svelte 개발을 위한 완벽한 환경을 구축하는 방법을 단계별로 알아보겠습니다. 현대적인 개발 도구들을 설정하여 생산성을 극대화하고 코드 품질을 보장합니다. 실무에서 바로 사용할 수 있는 최적화된 개발 워크플로우를 구성해보겠습니다.
2.1 Node.js 설치 및 설정
Node.js란 무엇인가?
Node.js는 Chrome V8 엔진을 기반으로 하는 JavaScript 런타임 환경으로, 서버 사이드에서 JavaScript를 실행할 수 있게 해줍니다. Svelte 개발을 위해서는 Node.js가 필수이며, 패키지 관리, 빌드 도구, 개발 서버 실행 등에 사용됩니다. npm(Node Package Manager)이 함께 설치되어 수천만 개의 오픈소스 패키지를 쉽게 관리할 수 있습니다.
LTS vs Current 버전 선택 기준
LTS(Long Term Support) 버전 선택을 권장하는 이유
특징 | LTS 버전 | Current 버전 |
---|---|---|
안정성 | 30개월 장기 지원 보장 | 6개월 후 지원 종료 |
보안 업데이트 | 정기적인 보안 패치 제공 | 제한적인 보안 업데이트 |
프로덕션 적합성 | 운영 환경에서 검증됨 | 실험적 기능 포함 가능 |
생태계 호환성 | 대부분의 패키지가 지원 | 일부 패키지 호환성 문제 |
2025년 현재 권장 버전
# 현재 활성 LTS 버전들
Node.js 18 (Hydrogen): 2025년 4월까지 지원
Node.js 20 (Iron): 2026년 4월까지 지원
Node.js 22 (Jod): 2027년 4월까지 지원 (최신 LTS)
권장: Node.js 22 LTS 사용 (가장 최신 기능과 장기간 지원)
운영체제별 설치 방법
Windows 설치
방법 1: 공식 인스톨러 사용 (초보자 추천)
- Node.js 공식 사이트에서 LTS 버전 다운로드
- 다운로드한
.msi
파일 실행 - 설치 마법사 따라하기 (모든 기본 옵션 그대로 사용)
- 설치 완료 후 재부팅
방법 2: Chocolatey 사용
# Chocolatey로 설치 (관리자 권한 필요)
choco install nodejs-lts
# 버전 확인
node --version
npm --version
macOS 설치
방법 1: 공식 인스톨러 사용
- Node.js 공식 사이트에서 LTS 버전 다운로드
- 다운로드한
.pkg
파일 실행하여 설치
방법 2: Homebrew 사용 (개발자 추천)
# Homebrew 미설치시 먼저 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Node.js LTS 설치
brew install node@22
# 환경변수 설정
echo 'export PATH="/opt/homebrew/opt/node@22/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
Linux (Ubuntu/Debian) 설치
방법 1: NodeSource 저장소 사용 (권장)
# NodeSource 저장소 추가
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
# Node.js 설치
sudo apt-get install -y nodejs
# 빌드 도구 설치 (일부 npm 패키지에 필요)
sudo apt-get install -y build-essential
방법 2: Snap 사용
# LTS 버전 설치
sudo snap install node --classic
# 버전 확인
node --version
npm --version
NVM으로 여러 버전 관리하기
Node Version Manager(NVM)를 사용하면 여러 Node.js 버전을 쉽게 관리할 수 있습니다. 프로젝트별로 다른 Node.js 버전이 필요한 경우나 새 버전을 테스트할 때 매우 유용합니다. 팀 프로젝트에서 특정 Node.js 버전을 통일해야 할 때도 NVM이 필수적입니다.
Windows (nvm-windows)
# nvm-windows 설치 후
nvm list available # 사용 가능한 버전 확인
nvm install 22.15.0 # 특정 버전 설치
nvm install --lts # 최신 LTS 설치
nvm use 22.15.0 # 사용할 버전 전환
nvm list # 설치된 버전 목록
macOS/Linux
# nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
# 터미널 재시작 또는 다음 실행
source ~/.bashrc # 또는 ~/.zshrc
# LTS 버전 설치 (npm 최신 버전 포함)
nvm install --lts --latest-npm
# 기본 버전으로 설정
nvm alias default 22.15.0
# 프로젝트별 .nvmrc 파일 사용
echo "22.15.0" > .nvmrc
nvm use # .nvmrc 파일 기준으로 자동 전환
설치 확인
# Node.js 버전 확인
node --version
# 출력 예시: v22.15.0
# npm 버전 확인
npm --version
# 출력 예시: 10.9.0
# npm 글로벌 패키지 경로 확인
npm config get prefix
# npm 설정 확인
npm config list
npm 업데이트
# npm을 최신 버전으로 업데이트
npm install -g npm@latest
# 특정 버전으로 설치
npm install -g npm@10.9.0
# npm 캐시 정리 (문제 발생시)
npm cache clean --force
2.2 Svelte 프로젝트 생성
SvelteKit vs Vanilla Svelte 선택 가이드
Svelte로 프로젝트를 시작할 때는 용도에 맞는 도구를 선택하는 것이 중요합니다. SvelteKit은 풀스택 웹 애플리케이션을, Vanilla Svelte는 단순한 프론트엔드 컴포넌트나 위젯에 적합합니다. 대부분의 웹 프로젝트에서는 라우팅, SEO, 서버사이드 렌더링이 필요하므로 SvelteKit을 권장합니다.
특징 | SvelteKit | Vanilla Svelte |
---|---|---|
사용 목적 | 풀스택 웹 앱 | 컴포넌트, 위젯 |
라우팅 | 파일 기반 라우팅 내장 | 별도 라이브러리 필요 |
SSR/SSG | 기본 지원 | 수동 설정 필요 |
SEO | 최적화됨 | 추가 작업 필요 |
API 라우트 | 내장 | 별도 백엔드 필요 |
배포 | 다양한 어댑터 제공 | 정적 파일만 가능 |
SvelteKit 프로젝트 생성
create-svelte 사용법
# SvelteKit 프로젝트 생성
npm create svelte@latest my-svelte-app
# 생성 과정에서 나오는 옵션들
┌ Welcome to SvelteKit!
│
◇ Which Svelte app template?
│ › Skeleton project
│
◇ Add type checking with TypeScript?
│ › Yes, using TypeScript syntax
│
◇ Select additional options (use arrow keys/space bar)
│ ✔ Add ESLint for code linting
│ ✔ Add Prettier for code formatting
│ ✔ Add Playwright for browser testing
│ ✔ Add Vitest for unit testing
│
└ Your project is ready!
# 프로젝트 폴더로 이동
cd my-svelte-app
# 의존성 설치
npm install
# 개발 서버 실행
npm run dev -- --open
템플릿 옵션 설명
템플릿 | 설명 | 적합한 용도 |
---|---|---|
Skeleton | 빈 프로젝트 | 처음부터 구축 |
Demo app | 예제 코드 포함 | 학습용, 프로토타입 |
Library | npm 패키지 제작용 | 재사용 가능한 라이브러리 |
생성된 프로젝트 구조
my-svelte-app/
├── src/
│ ├── lib/ # 재사용 컴포넌트
│ ├── routes/ # 페이지들 (파일 기반 라우팅)
│ │ ├── +layout.svelte # 공통 레이아웃
│ │ └── +page.svelte # 홈페이지
│ ├── app.d.ts # TypeScript 타입 정의
│ └── app.html # HTML 템플릿
├── static/ # 정적 파일들
├── package.json # 프로젝트 설정
├── svelte.config.js # Svelte 설정
├── vite.config.js # Vite 설정
└── tsconfig.json # TypeScript 설정
Vanilla Svelte 프로젝트 생성
임베드된 위젯이나 기존 프로젝트에 Svelte 컴포넌트를 추가하고 싶을 때 사용합니다.
# Vite로 Svelte 프로젝트 생성
npm create vite@latest my-svelte-widget -- --template svelte-ts
cd my-svelte-widget
npm install
npm run dev
프로젝트 설정 파일 이해하기
package.json 분석
{
"name": "my-svelte-app",
"version": "0.0.1",
"private": true,
"type": "module",
"scripts": {
"dev": "vite dev", // 개발 서버 실행
"build": "vite build", // 프로덕션 빌드
"preview": "vite preview", // 빌드 결과 미리보기
"test": "vitest", // 단위 테스트 실행
"lint": "eslint .", // 코드 품질 검사
"format": "prettier --write ." // 코드 포맷팅
},
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^4.0.0",
"svelte": "^5.0.0",
"vite": "^5.0.0"
}
}
svelte.config.js 설정
import adapter from '@sveltejs/adapter-auto';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter(),
// 별칭 설정 (경로 단축)
alias: {
$components: 'src/lib/components',
$utils: 'src/lib/utils',
},
// 환경변수 설정
env: {
publicPrefix: 'PUBLIC_',
},
},
};
export default config;
vite.config.js 커스터마이징
import { defineConfig } from 'vite';
import { sveltekit } from '@sveltejs/kit/vite';
export default defineConfig({
plugins: [sveltekit()],
// 개발 서버 설정
server: {
port: 3000,
host: true, // 네트워크에서 접근 가능
open: true, // 자동으로 브라우저 열기
},
// 빌드 설정
build: {
sourcemap: true,
minify: 'terser',
},
});
2.3 SvelteKit을 위한 VS Code 확장 프로그램 소개
VS Code는 SvelteKit 개발에 가장 적합한 에디터입니다. 올바른 확장 프로그램 설정으로 개발 생산성을 크게 향상시킬 수 있습니다.
1. Svelte for VS Code (공식)
- 마켓플레이스: svelte.svelte-vscode
- GitHub: sveltejs/language-tools
- 기능:
- 문법 하이라이팅
- prettier-plugin-svelte를 통한 코드 포맷팅
- 자동완성 및 IntelliSense
- CSS 색상 하이라이팅
- 오류 검사 및 호버 정보
- TypeScript 플러그인 번들 포함
2. SvelteKit Snippets
- 기능: SvelteKit 개발에 필수적인 코드 스니펫 제공
- 사용법:
kitComp
와 같이 "kit" 키워드를 사용한 명령 패턴 - 포함 내용: 컴포넌트 생성, 로직 블록, 조건문, 엔드포인트, 로드 함수 등
3. Svelte 5 Snippets (kit, runes, superform ...)
- 마켓플레이스: thonymg.svelte-5-kit-snippets
- GitHub: thonymg/svelte-5-kit-snippets
- 기능: Svelte 5와 SvelteKit 2를 위한 최신 스니펫 컬렉션
- 사용법:
- 기본 Svelte:
sv
또는sv-
접두사 - SvelteKit:
sk
또는sk-
접두사 - Svelte Runes:
sr
또는sr-
접두사 - Svelte Stores:
ss
또는ss-
접두사
- 기본 Svelte:
- 포함 내용: Runes ($state, $derived, $effect), Superform, TypeScript 지원
4. Awesome Svelte 5 Snippets
- 마켓플레이스: j13n.awesome-svelte-snippets
- 기능: Svelte 5 Runes 지원을 포함한 포괄적인 스니펫 컬렉션
- 특징: Svelte와 SvelteKit을 위한 awesome 스니펫들 제공
- 장점: Svelte 5의 최신 기능들을 완벽 지원
5. Path Intellisense
- 마켓플레이스: christian-kohler.path-intellisense
- 기능: 파일 경로 자동완성 및 IntelliSense 제공
- 장점: SvelteKit에서 에셋 파일 import 시 경로 오류 방지
- 설정: Svelte 확장과 함께 사용 시
svelte.enable-ts-plugin
을false
로 설정 권장
6. Svelte Radar (최신 추가)
- 기능: 프로젝트의 라우팅 구조 시각적 개요 제공
- 출시: 2025년 2월 신규 추가
7. Tailwind CSS IntelliSense
- 마켓플레이스: bradlc.vscode-tailwindcss
- 기능: Tailwind CSS 문법 하이라이팅, 린팅, 자동완성
- 장점: 문서 참조 없이도 유틸리티 클래스명 지능적 제안
8. GitLens
- 마켓플레이스: eamodio.gitlens
- 기능: Git 변경사항 추적 및 시각화
- 제공:
- 커밋 작성자, 날짜, 메시지 표시
- 커밋 히스토리 관리
- 직접 Git 작업 수행 가능
9. Better Comments
- 마켓플레이스: aaron-bond.better-comments
- 기능: 시각적으로 구분되는 주석 생성
- 용도: 질문, 실수, 사실, 할 일 목록 등
10. CodeSnap
- 마켓플레이스: adpyke.codesnap
- 기능: 선택된 코드 블록의 스크린샷 생성 및 저장
- 장점: 코드 공유 시 편의성 향상
11. Auto Import - ES6, TS, JSX, TSX
- 마켓플레이스: steoates.autoimport
- 기능: TypeScript/JavaScript 파일에서 자동 import 기능
- 장점: Svelte 컴포넌트와 유틸리티 함수 import 자동화
2.4 첫 번째 Svelte 앱 실행
개발 서버 시작하기
생성한 Svelte 프로젝트를 실제로 실행해보겠습니다. 개발 서버는 파일 변경을 감지하고 자동으로 브라우저를 새로고침하는 Hot Module Replacement(HMR) 기능을 제공합니다. 실시간으로 변경사항을 확인하며 빠른 개발 사이클을 경험할 수 있습니다.
# 프로젝트 폴더로 이동
cd my-svelte-app
# 개발 서버 실행 (기본 포트 5173)
npm run dev
# 포트 지정해서 실행
npm run dev -- --port 3000
# 네트워크에 노출하여 실행 (모바일에서 접근 가능)
npm run dev -- --host
# 실행 후 자동으로 브라우저 열기
npm run dev -- --open
실행 결과 확인
> my-svelte-app@0.0.1 dev
> vite dev
VITE v5.0.0 ready in 543 ms
➜ Local: http://localhost:5173/
➜ Network: http://192.168.1.100:5173/
➜ press h to show help
기본 앱 구조 살펴보기
홈페이지 (src/routes/+page.svelte)
<script>
import Counter from '$lib/Counter.svelte';
let name = $state('Svelte');
</script>
<svelte:head>
<title>Welcome to SvelteKit</title>
<meta name="description" content="Svelte demo app" />
</svelte:head>
<section>
<h1>Welcome to <span class="welcome">SvelteKit</span></h1>
<h2>
Try editing <strong>src/routes/+page.svelte</strong>
</h2>
<Counter />
</section>
<style>
.welcome {
color: #ff3e00;
text-transform: uppercase;
font-weight: 100;
}
section {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
flex: 0.6;
}
h1 {
width: 100%;
}
</style>
카운터 컴포넌트 (src/lib/Counter.svelte)
<script>
let count = $state(0);
function increment() {
count += 1;
}
</script>
<button onclick={increment}>
clicks: {count}
</button>
<style>
button {
font-family: inherit;
font-size: 1.4rem;
padding: 1rem 2rem;
color: #ff3e00;
background-color: rgba(255, 62, 0, 0.1);
border-radius: 2rem;
border: 2px solid rgba(255, 62, 0, 0.2);
outline: none;
width: 200px;
font-variant-numeric: tabular-nums;
cursor: pointer;
}
button:focus {
border: 2px solid #ff3e00;
}
button:active {
background-color: rgba(255, 62, 0, 0.2);
}
</style>
실습해보기: Svelte REPL에서 이 코드를 직접 실행해보세요!
첫 번째 수정해보기
1. 제목 변경하기
src/routes/+page.svelte
파일을 열고 다음과 같이 수정해보세요:
<script>
import Counter from '$lib/Counter.svelte';
let name = $state('나의 첫 Svelte 앱');
</script>
<svelte:head>
<title>{name}</title>
<meta name="description" content="Svelte 학습 프로젝트" />
</svelte:head>
<section>
<h1>
안녕하세요! <span class="welcome">{name}</span>입니다
</h1>
<p>실시간으로 변경사항이 반영되는 것을 확인해보세요!</p>
<Counter />
</section>
2. 새로운 컴포넌트 만들기
src/lib/Greeting.svelte
파일을 생성하고 다음 코드를 입력하세요:
<script>
let { name = '사용자' } = $props();
let currentTime = $state(new Date().toLocaleTimeString());
// 1초마다 시간 업데이트
setInterval(() => {
currentTime = new Date().toLocaleTimeString();
}, 1000);
</script>
<div class="greeting">
<h2>안녕하세요, {name}님!</h2>
<p>현재 시간: <strong>{currentTime}</strong></p>
</div>
<style>
.greeting {
padding: 1rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border-radius: 8px;
text-align: center;
margin: 1rem 0;
}
h2 {
margin: 0 0 0.5rem 0;
}
p {
margin: 0;
}
</style>
3. 메인 페이지에 추가하기
src/routes/+page.svelte
에 새로운 컴포넌트를 추가하세요:
<script>
import Counter from '$lib/Counter.svelte';
import Greeting from '$lib/Greeting.svelte';
let name = $state('나의 첫 Svelte 앱');
</script>
<svelte:head>
<title>{name}</title>
<meta name="description" content="Svelte 학습 프로젝트" />
</svelte:head>
<section>
<h1>
안녕하세요! <span class="welcome">{name}</span>입니다
</h1>
<Greeting name="개발자" />
<Counter />
</section>
HMR (Hot Module Replacement) 체험하기
파일을 저장하는 즉시 브라우저가 자동으로 업데이트되는 것을 확인해보세요:
- CSS 변경: 색상이나 크기를 변경하면 즉시 반영됩니다
- JavaScript 로직 변경: 함수나 상태를 수정해도 페이지 새로고침 없이 적용됩니다
- 컴포넌트 추가/제거: 새로운 컴포넌트도 바로 확인 가능합니다
프로덕션 빌드 테스트
# 프로덕션용 빌드 생성
npm run build
# 빌드 결과물 미리보기
npm run preview
빌드 결과 분석
✓ building client (vite)
✓ building server (vite)
Run npm run preview to preview your production build locally.
> Using @sveltejs/adapter-auto
✔ done
Build output:
├─ client: 45.2 kB
├─ server: 12.8 kB
└─ total: 58.0 kB
기본 명령어 정리
명령어 | 기능 | 사용 시기 |
---|---|---|
npm run dev | 개발 서버 실행 | 개발 중 |
npm run build | 프로덕션 빌드 | 배포 전 |
npm run preview | 빌드 미리보기 | 배포 테스트 |
npm run lint | 코드 품질 검사 | 코드 정리 |
npm run format | 코드 포맷팅 | 코드 정리 |
npm run test | 테스트 실행 | 테스트 시 |
정리
개발 환경 설정이 완료되었습니다! 이제 다음과 같은 도구들이 준비되었습니다:
핵심 요약
- Node.js 22 LTS: 최신 기능과 장기 지원 보장
- SvelteKit: 풀스택 웹 앱 개발 도구
- VS Code + 확장 프로그램: 최적화된 개발 환경
- 필수 VS Code 확장: Svelte 공식 확장 및 생산성 도구들
다음 단계: 3장 "Svelte 컴포넌트 기초"에서는 Svelte의 핵심인 컴포넌트 구조와 기본 문법을 자세히 알아보겠습니다. 실제 개발에 필요한 모든 기초를 탄탄히 다져보겠습니다!