Skip to content

Commit 8a207d0

Browse files
committed
svelte manual added
1 parent 267cb87 commit 8a207d0

7 files changed

Lines changed: 245 additions & 0 deletions

File tree

_data/tags.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,18 @@
7272

7373
- slug: tcp
7474
name: tcp
75+
76+
- slug: front-end
77+
name: front-end
78+
79+
- slug: svelte
80+
name: svelte
81+
82+
- slug: js
83+
name: js
84+
85+
- slug: ts
86+
name: ts
87+
88+
- slug: vite
89+
name: vite
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
---
2+
layout: post
3+
title: Svelte biginner manual
4+
tags: [front-end,svelte,js,ts,vite]
5+
---
6+
7+
## 📘 Svelte 초보자 학습 매뉴얼
8+
9+
### 1.1 SvelteKit 설치
10+
11+
``` bash
12+
# 최신 SvelteKit 프로젝트 생성
13+
npm create svelte@latest my-app
14+
cd my-app
15+
npm install
16+
npm run dev
17+
```
18+
19+
👉 **SvelteKit**은 Svelte 단독보다 권장.\
20+
라우팅, SSR, API 핸들링까지 지원해서 초보자도 바로 실무 감각을 익힐 수
21+
있음.
22+
23+
------------------------------------------------------------------------
24+
25+
## 2. 기본 문법
26+
27+
### 2.1 데이터 바인딩
28+
29+
``` svelte
30+
<script>
31+
let name = "흙먹는거아";
32+
</script>
33+
34+
<input bind:value={name} />
35+
<p>안녕하세요, {name}님!</p>
36+
```
37+
38+
### 2.2 조건부 렌더링
39+
40+
``` svelte
41+
<script>
42+
let loggedIn = true;
43+
</script>
44+
45+
{#if loggedIn}
46+
<p>로그인 성공!</p>
47+
{:else}
48+
<p>로그인 필요</p>
49+
{/if}
50+
```
51+
52+
### 2.3 반복 렌더링
53+
54+
``` svelte
55+
<script>
56+
let items = ["사과", "바나나", "체리"];
57+
</script>
58+
59+
<ul>
60+
{#each items as item}
61+
<li>{item}</li>
62+
{/each}
63+
</ul>
64+
```
65+
66+
------------------------------------------------------------------------
67+
68+
## 3. 상태 관리 (Svelte Store)
69+
70+
### 3.1 Writable Store
71+
72+
``` js
73+
// src/lib/stores/user.js
74+
import { writable } from "svelte/store";
75+
76+
export const user = writable({ name: "Guest", level: 0 });
77+
```
78+
79+
### 3.2 사용하기
80+
81+
``` svelte
82+
<script>
83+
import { user } from "$lib/stores/user";
84+
</script>
85+
86+
<h1>{$user.name}님 환영합니다</h1>
87+
{#if $user.level >= 2}
88+
<button>관리자 메뉴</button>
89+
{/if}
90+
```
91+
92+
------------------------------------------------------------------------
93+
94+
## 4. 라우팅 (SvelteKit)
95+
96+
### 4.1 기본 구조
97+
98+
src/routes/
99+
├── +page.svelte // 메인 페이지
100+
├── about/+page.svelte // /about 페이지
101+
└── dashboard/+page.svelte
102+
103+
### 4.2 Layout 활용
104+
105+
- `src/routes/+layout.svelte` → 모든 페이지 공통 UI (예: 헤더/푸터)\
106+
- `src/routes/dashboard/+layout.svelte` → 특정 하위 라우트 전용 레이아웃
107+
108+
------------------------------------------------------------------------
109+
110+
## 5. API 연동
111+
112+
### 5.1 클라이언트에서 호출
113+
114+
``` svelte
115+
<script>
116+
let posts = [];
117+
118+
onMount(async () => {
119+
const res = await fetch("/api/posts");
120+
posts = await res.json();
121+
});
122+
</script>
123+
```
124+
125+
### 5.2 서버 엔드포인트
126+
127+
``` ts
128+
// src/routes/api/posts/+server.ts
129+
import type { RequestHandler } from '@sveltejs/kit';
130+
131+
export const GET: RequestHandler = async () => {
132+
return new Response(JSON.stringify([{ id: 1, title: "Hello" }]));
133+
};
134+
```
135+
136+
------------------------------------------------------------------------
137+
138+
## 6. 세션 & 인증
139+
140+
- `hooks.server.ts`를 이용해 요청 시 쿠키/세션 검사 가능\
141+
- 로그인된 사용자 정보를 `event.locals`에 저장\
142+
- UI에서는 `store`와 연동해 권한 기반 조건부 렌더링
143+
144+
예:
145+
146+
``` ts
147+
// src/hooks.server.ts
148+
export async function handle({ event, resolve }) {
149+
const token = event.cookies.get("auth");
150+
event.locals.user = token ? { name: "흙먹는거아", level: 2 } : null;
151+
return resolve(event);
152+
}
153+
```
154+
155+
------------------------------------------------------------------------
156+
157+
## 7. 배포 전략
158+
159+
### 7.1 정적 사이트
160+
161+
``` bash
162+
npm install -D @sveltejs/adapter-static
163+
```
164+
165+
- `svelte.config.js`에서 adapter-static 적용\
166+
- GitHub Pages, Netlify 등에 배포
167+
168+
### 7.2 Node.js 서버
169+
170+
``` bash
171+
npm install -D @sveltejs/adapter-node
172+
```
173+
174+
- PM2로 프로세스 관리
175+
176+
``` bash
177+
pm2 start build/index.js --name my-svelte-app
178+
```
179+
180+
------------------------------------------------------------------------
181+
182+
## 8. 자주 겪는 이슈 & 해결법
183+
184+
- **메인 화면이 안 뜸**`vite.config.ts` 플러그인 충돌 → 최소화 후
185+
실행\
186+
- **배포 시 adapter-auto 문제** → 반드시 `adapter-static` 또는
187+
`adapter-node`로 변경\
188+
- **UI 컴포넌트 부족**`shadcn-svelte` 같은 검증된 UI Kit 활용
189+
190+
------------------------------------------------------------------------
191+
192+
## 9. 학습 로드맵
193+
194+
1. SvelteKit 프로젝트 생성
195+
1. 기본 문법 (if/each/bind)
196+
1. Store 활용해 전역 상태 관리
197+
1. 라우팅 & Layout 구조 이해
198+
1. API 연동 (서버/클라이언트)
199+
1. 세션/권한 처리
200+
1. 빌드 & 배포

tag/front-end.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
layout: posts_by_tag
3+
tag: front-end
4+
title: Posts tagged front-end
5+
---
6+

tag/js.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
layout: posts_by_tag
3+
tag: js
4+
title: Posts tagged js
5+
---
6+

tag/svelte.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
layout: posts_by_tag
3+
tag: svelte
4+
title: Posts tagged svelte
5+
---
6+

tag/ts.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
layout: posts_by_tag
3+
tag: ts
4+
title: Posts tagged ts
5+
---
6+

tag/vite.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
layout: posts_by_tag
3+
tag: vite
4+
title: Posts tagged vite
5+
---
6+

0 commit comments

Comments
 (0)