🌿 SvelteKit에 Tailwind CSS ν†΅ν•©ν•˜κΈ°: μ²˜μŒλΆ€ν„° λκΉŒμ§€ μ™„λ²½ κ°€μ΄λ“œ

SvelteKit ν”„λ‘œμ νŠΈμ— Tailwind CSSλ₯Ό μ„€μ •ν•˜λŠ” κ°€μž₯ κΉ”λ”ν•˜κ³  곡식적인 방법을 μ†Œκ°œν•©λ‹ˆλ‹€. μ΅œμ‹  λ¬Έμ„œλ₯Ό κΈ°μ€€μœΌλ‘œ μ •λ¦¬ν–ˆμœΌλ©°, μ‹€μ œ μ½”λ“œμ™€ μ„€μ • μ˜ˆμ‹œλ₯Ό ν¬ν•¨ν–ˆμŠ΅λ‹ˆλ‹€.


βœ… 01. SvelteKit ν”„λ‘œμ νŠΈ 생성

SvelteKit ν”„λ‘œμ νŠΈκ°€ 아직 μ—†λ‹€λ©΄, μ•„λž˜ λͺ…λ Ήμ–΄λ‘œ μƒˆλ‘œ λ§Œλ“€μ–΄ μ£Όμ„Έμš”.
곡식 λ¬Έμ„œμ—μ„œλ„ μ•ˆλ‚΄ν•˜λŠ” κ°€μž₯ ν‘œμ€€μ μΈ λ°©λ²•μž…λ‹ˆλ‹€:

npx sv create my-project
cd my-project

βœ… 02. Tailwind CSS μ„€μΉ˜

Tailwind CSS와 κ΄€λ ¨λœ ν”ŒλŸ¬κ·ΈμΈμ„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

npm install tailwindcss @tailwindcss/vite

βœ… 03. Vite μ„€μ • 파일 μˆ˜μ •

vite.config.ts λ˜λŠ” vite.config.js에 Tailwind ν”ŒλŸ¬κ·ΈμΈμ„ μΆ”κ°€ν•©λ‹ˆλ‹€:

import { sveltekit } from '@sveltejs/kit/vite';
import { defineConfig } from 'vite';
import tailwindcss from '@tailwindcss/vite';

export default defineConfig({
  plugins: [
    tailwindcss(),
    sveltekit(),
  ],
});

βœ… 04. Tailwind CSS import 파일 생성

src/app.css νŒŒμΌμ„ λ§Œλ“€κ³  λ‹€μŒμ„ μΆ”κ°€ν•˜μ„Έμš”:

@import "tailwindcss";

이 νŒŒμΌμ€ Tailwind의 κΈ°λ³Έ μŠ€νƒ€μΌ, μ»΄ν¬λ„ŒνŠΈ, μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” 핡심 νŒŒμΌμž…λ‹ˆλ‹€.


βœ… 05. CSSλ₯Ό SvelteKit λ ˆμ΄μ•„μ›ƒμ— import

SvelteKit은 기본적으둜 src/routes/+layout.svelteμ—μ„œ μ „μ—­ CSSλ₯Ό λ‘œλ“œν•©λ‹ˆλ‹€.
νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ•„λž˜μ²˜λŸΌ μž‘μ„±ν•˜μ„Έμš”:

<script>
  import "../app.css";
</script>

<slot />

+layout.svelteλŠ” λͺ¨λ“  νŽ˜μ΄μ§€μ— 곡톡 μ μš©λ˜λŠ” μ „μ—­ UI 및 CSSλ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.


βœ… 06. 개발 μ„œλ²„ μ‹€ν–‰

섀정이 끝났닀면, 개발 μ„œλ²„λ₯Ό μ‹€ν–‰ν•΄μ„œ Tailwindκ°€ 잘 μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€:

npm run dev

λΈŒλΌμš°μ €μ—μ„œ http://localhost:5173을 μ—΄μ–΄ ν™•μΈν•˜μ„Έμš”.


βœ… 07. Tailwind CSS μ‚¬μš© μ‹œμž‘

이제 Tailwind μœ ν‹Έλ¦¬ν‹° 클래슀λ₯Ό 마음껏 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€!

예: +page.svelte

<h1 class="text-3xl font-bold underline">
  Hello world!
</h1>

<style lang="postcss">
  @reference "tailwindcss";

  :global(html) {
    background-color: theme(--color-gray-100);
  }
</style>
  • class="text-3xl font-bold": Tailwind의 ν…μŠ€νŠΈ 크기와 κ΅΅κΈ° μ„€μ •
  • <style lang="postcss">: Tailwindμ—μ„œ μŠ€νƒ€μΌμ„ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ PostCSS μ‚¬μš©
  • @reference와 theme() ν•¨μˆ˜: Tailwind λ³€μˆ˜ μ‚¬μš©

🧠 마무리 정리

ν•­λͺ©μ„€λͺ…
μ„€μ • 방식곡식 λ¬Έμ„œ 기반의 Vite ν”ŒλŸ¬κ·ΈμΈ 톡합 방식
μŠ€νƒ€μΌ 적용HTML 클래슀 기반 μœ ν‹Έλ¦¬ν‹° 방식
ν™•μž₯μ„±PostCSS, JIT λͺ¨λ“œ, ν…Œλ§ˆ μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯
기타λͺ¨λ“  섀정은 μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯, μ„€μ • 파일둜 μ‘°μ • κ°€λŠ₯

🎁 λ‹€μŒ κΈ€ 예고

  • 닀크 λͺ¨λ“œ 및 μ‚¬μš©μž ν…Œλ§ˆ μ μš©ν•˜κΈ°
  • daisyUI, Flowbite λ“± UI 라이브러리 μΆ”κ°€ν•˜κΈ°
  • SvelteKit + Tailwind둜 포트폴리였 μ‚¬μ΄νŠΈ λ§Œλ“€κΈ°

μƒ˜ν”Œ ν”„λ‘œμ νŠΈ zip νŒŒμΌμ„ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ λ§ν¬μ—μ„œ λ‹€μš΄λ‘œλ“œν•˜μ‹€ 수 μžˆμ–΄μš”:

이 ν”„λ‘œμ νŠΈμ—λŠ” λ‹€μŒμ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

  • vite.config.jsμ—μ„œ @tailwindcss/vite ν”ŒλŸ¬κ·ΈμΈ μ„€μ •
  • src/app.css에 Tailwind import
  • +layout.svelteμ—μ„œ CSS μ „μ—­ import
  • +page.svelte에 Tailwind μœ ν‹Έλ¦¬ν‹° 클래슀 및 PostCSS μ˜ˆμ‹œ 포함


⚑ Viteλž€?

ViteλŠ” μ°¨μ„ΈλŒ€ ν”„λ‘ νŠΈμ—”λ“œ 개발 λΉŒλ“œ λ„κ΅¬μž…λ‹ˆλ‹€.
Vue.js의 μ°½μ‹œμž Evan Youκ°€ λ§Œλ“€μ—ˆμœΌλ©°, ν˜„μž¬λŠ” React, Svelte, Preact λ“± λ‹€μ–‘ν•œ ν”„λ ˆμž„μ›Œν¬μ—μ„œ ν­λ„“κ²Œ μ‚¬μš©λ˜κ³  μžˆμ–΄μš”.


πŸ’‘ ν•œ 쀄 μš”μ•½

ViteλŠ” λΉ λ₯Έ 개발 μ„œλ²„μ™€ μ΅œμ ν™”λœ ν”„λ‘œλ•μ…˜ λΉŒλ“œλ₯Ό μ œκ³΅ν•˜λŠ” λͺ¨λ˜ λΉŒλ“œ λ„κ΅¬μž…λ‹ˆλ‹€.


🧠 Vite의 μ£Όμš” νŠΉμ§•

νŠΉμ§•μ„€λͺ…
⚑ λΉ λ₯Έ 개발 μ„œλ²„λͺ¨λ“ˆ λ‹¨μœ„λ‘œ μš”μ²­μ„ μ²˜λ¦¬ν•΄μ„œ μ¦‰μ‹œ 반영됨 (Hot Module Replacement)
🧱 λͺ¨λ“ˆ 기반ES λͺ¨λ“ˆ(ESM)을 μ‚¬μš©ν•˜μ—¬ λΈŒλΌμš°μ €κ°€ 직접 λͺ¨λ“ˆ 뢈러옴
πŸ› οΈ λΉŒλ“œ 도ꡬ 톡합Rollup을 λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•΄μ„œ μ΅œμ ν™”λœ ν”„λ‘œλ•μ…˜ λΉŒλ“œ 제곡
πŸ”Œ ν”ŒλŸ¬κ·ΈμΈ μ‹œμŠ€ν…œλ‹€μ–‘ν•œ Vite ν”ŒλŸ¬κ·ΈμΈκ³Ό 톡합 κ°€λŠ₯ (예: Tailwind, React, Svelte λ“±)
πŸ“¦ κ²½λŸ‰ μ„€μ •vite.config.js λ˜λŠ” vite.config.ts둜 κ°„λ‹¨ν•˜κ²Œ μ„€μ • κ°€λŠ₯

πŸ§ͺ Vite와 SvelteKit의 관계

  • SvelteKitλŠ” λ‚΄λΆ€μ μœΌλ‘œ Viteλ₯Ό λΉŒλ“œ λ„κ΅¬λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μš°λ¦¬κ°€ μž‘μ„±ν•œ vite.config.jsλŠ” SvelteKit의 λ™μž‘ λ°©μ‹μ΄λ‚˜ ν”ŒλŸ¬κ·ΈμΈμ„ μ»€μŠ€ν„°λ§ˆμ΄μ§•ν•  λ•Œ μ“°μž…λ‹ˆλ‹€.

예:

import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';

export default defineConfig({
  plugins: [
    tailwindcss(),   // Tailwind ν”ŒλŸ¬κ·ΈμΈ 등둝
    sveltekit(),     // SvelteKit μ‚¬μš© μ„ μ–Έ
  ],
});

🧩 Vite둜 κ°€λŠ₯ν•œ 일

μž‘μ—…λͺ…λ Ήμ–΄
개발 μ„œλ²„ μ‹€ν–‰npm run dev
λΉŒλ“œnpm run build
λΉŒλ“œ κ²°κ³Ό 미리 보기npm run preview
ν”ŒλŸ¬κ·ΈμΈ μΆ”κ°€vite-plugin-xxx ν˜•νƒœλ‘œ μ„€μΉ˜ κ°€λŠ₯

πŸ“ vite.config.js μœ„μΉ˜μ™€ μ—­ν• 

  • ν”„λ‘œμ νŠΈ 루트 디렉토리에 쑴재 (vite.config.js λ˜λŠ” vite.config.ts)
  • μ£Όμš” μ—­ν• :
    • ν”ŒλŸ¬κ·ΈμΈ μ„€μ •
    • 별칭(alias) μ •μ˜
    • λΉŒλ“œ 경둜 μ„€μ •
    • 개발 μ„œλ²„ μ˜΅μ…˜ μ„€μ •

βœ… 마무리 정리

ν•­λͺ©μ„€λͺ…
ViteλΉ λ₯Έ 개발 μ„œλ²„ + Rollup 기반 λΉŒλ“œ 도ꡬ
SvelteKitλ‚΄λΆ€μ μœΌλ‘œ Viteλ₯Ό μ‚¬μš©ν•¨
Tailwind 톡합Vite ν”ŒλŸ¬κ·ΈμΈμ„ 톡해 μ‰½κ²Œ μ„€μ • κ°€λŠ₯
μ„€μ • 파일vite.config.jsμ—μ„œ ν”ŒλŸ¬κ·ΈμΈ 및 μ„€μ • μ‘°μ •

λ‹΅κΈ€ 남기기

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