Frontend/Svelte

μ œκ°€ λ§Œλ“  Svelte Web 은 μ™œ μ΄λ ‡κ²Œ λͺ»μƒκ²Όλ‚˜μš”? DaisyUI 인곡호흑기λ₯Ό λΆ™μ—¬λ΄μš”! #4

πŸ”₯GNGB-YoungπŸ”₯ 2023. 2. 5. 15:54

ν•΄λ‹Ή κ²Œμ‹œκΈ€μ€

(1) DaisyUI κ°œμš”

(2) DaisyUI 적용 방법

에 λŒ€ν•œ λ‚΄μš©μ„ λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.  

이전 κ²Œμ‹œκΈ€ - SvelteKit 에 μš”μ¦˜ 제일 μΈκΈ°λ§Žλ‹€λŠ” TailwindCSS λ₯Ό μ μš©ν•΄λ³ΌκΉŒμš”? #3

 

SvelteKit 에 μš”μ¦˜ 제일 μΈκΈ°λ§Žλ‹€λŠ” TailwindCSS λ₯Ό μ μš©ν•΄λ³ΌκΉŒμš”? #3

ν•΄λ‹Ή κ²Œμ‹œκΈ€μ€ (1) TailwindCSS κ°œμš” (2) TailwindCSS 적용 방법 에 λŒ€ν•œ λ‚΄μš©μ„ λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€. 이전 κ²Œμ‹œκΈ€ - 정식 μΆœμ‹œλœ SvelteKit 으둜 개발 ν™˜κ²½μ„ κ΅¬μ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€! #2 정식 μΆœμ‹œλœ SvelteKit 으둜 개발

gngb-tech.tistory.com


ch1 - DaisyUI λž€?

DaisyUI κ°€ λ­μ˜ˆμš”? κΌ­ μ‚¬μš©ν•΄μ•Ό ν•˜λ‚˜μš”?

TailwindCSS Component Library

    DaisyUI λŠ” 이전 κ²Œμ‹œκΈ€μ—μ„œ 닀룬 TailwindCSS Framework 에 μ’…μ†λœ Library μž…λ‹ˆλ‹€. DaisyUI λŠ” 사전에 μ•„λ¦„λ‹΅κ²Œ λ””μžμΈλ˜μ–΄ μžˆλŠ” μ—¬λŸ¬κ°€μ§€ UI Component λ₯Ό κ°œλ°œμžκ°€ μ›ν•˜λŠ”λŒ€λ‘œ μ‚¬μš©ν•  수 μžˆλŠ” Utility Tool 이며, (Bootstrap 의 μ‚¬μš© 방식과 μœ μ‚¬ν•©λ‹ˆλ‹€.) TailwindCSS 에 κΈ°λ°˜ν•˜κΈ° λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— TailwindCSS κ°€ μ„€μΉ˜λ˜μ§€ μ•Šμ€ ν™˜κ²½μ—μ„œλŠ” μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μΈ‘λ©΄μ—μ„œ, DaisyUI λ₯Ό TailwindCSS Component Library 둜 λΆ„λ₯˜ν•©λ‹ˆλ‹€.

좜처 : DaisyUI 곡식 ν™ˆνŽ˜μ΄μ§€

 

μ‚¬μš©ν•˜λŠ” 이유

    (TailwindCSS λ₯Ό ν¬ν•¨ν•˜μ—¬) 세뢀적인 CSS λ₯Ό λͺ¨λ‘ μ‘°μž‘ν•˜λ©°, Web κ°œλ°œμ— ν•„μš”ν•œ λ‹€μ–‘ν•œ UI Component 의 λ””μžμΈμ„ 직접 κ΅¬ν˜„ν•˜μ—¬ ν™œμš©ν•˜λŠ” 것은 ν˜„μ‹€μ μœΌλ‘œ μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ””μžμΈ μš”μ†Œλ₯Ό κ΅¬ν˜„ν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ–΄μ§€κΈ° λ•Œλ¬Έμ— 더 μ€‘μš”ν•œ 뢀뢄을 κ°œλ°œν•˜λŠ” 과정에 μ§‘μ€‘ν•˜μ§€ λͺ»ν•˜κ²Œ 될 κ°€λŠ₯성이 λ†’μ•„μ§€λ©°, λ””μžμΈ μΈ‘λ©΄μ—μ„œλ„ μ—¬λŸ¬κ°€μ§€ UI Component μ—μ„œ 컨셉적인 일관성을 μœ μ§€ν•˜μ§€ λͺ»ν•˜μ—¬ λ‚œμž‘ν•œ (보기에 μ’‹μ§€ μ•Šμ€) Web 이 될 κ°€λŠ₯성이 λ†’μ•„μ§‘λ‹ˆλ‹€. 무엇보닀 세뢀적인 CSS λ₯Ό λͺ¨λ‘ 직접 κ΅¬ν˜„ν•˜λŠ” 과정은 일뢀 Frontend 개발자λ₯Ό μ œμ™Έν•˜κ³ , λŒ€λΆ€λΆ„μ˜ κ°œλ°œμžλ“€μ—κ²ŒλŠ” 고톡과 μΈλ‚΄μ˜ μ‹œκ°„μœΌλ‘œ λ‹€κ°€μ˜΅λ‹ˆλ‹€.

    제λͺ©μ²˜λŸΌ, (인내심이 많고 λ””μžμΈ 감각이 쒋은 일뢀 κ°œλ°œμžλ“€μ„ μ œμ™Έν•˜κ³ ) 근본적으둜 λͺ»μƒκΈ΄ Web 을 λ§Œλ“€μ§€ μ•ŠλŠ” κ°€μž₯ μ‰¬μš΄ 방법은 사전에 μ •μ˜λœ ν›Œλ₯­ν•œ λ””μžμΈμ„ ν™œμš©ν•˜λŠ” 것 μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ μΈ‘λ©΄μ—μ„œ, TailwindCSS 기반의 λ””μžμΈ ν…œν”Œλ¦Ώμ„ ν™œμš©ν•  수 μžˆλŠ” 무료 Plugin 이 μ‘΄μž¬ν•œλ‹€λ©΄ μ‚¬μš©ν•˜μ§€ μ•Šμ„ 이유λ₯Ό μ—†μŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή κ²Œμ‹œκΈ€μ—μ„œλŠ” DaisyUI λ₯Ό κΈ°μ‘΄ SvelteKit (w/ TailwinCSS) ν™˜κ²½μ— μ„€μΉ˜ν•˜κ³  λ””μžμΈμ— μ μš©ν•˜λŠ” λͺ‡ κ°€μ§€ μ˜ˆμ‹œλ₯Ό 닀루도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.


ch2 - SvelteKit (w/ TailwindCSS) ν™˜κ²½μ— μ μš©ν•˜λŠ” 방법

DaisyUI λ₯Ό μ„€μΉ˜ν•˜κ³ , μ μš©ν•œ μ˜ˆμ‹œλ₯Ό λ³΄μ—¬μ£Όμ„Έμš”!

μ„€μΉ˜

    이전 κ²Œμ‹œκΈ€μ—μ„œ μ„€μ •ν•œ 개발 ν™˜κ²½μ΄ μ „μ œ λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉, SvelteKit 개발 ν™˜κ²½μ— TailwinCSS κ°€ μ„€μΉ˜λ˜κ³  μ •μƒμ μœΌλ‘œ 적용된 상황을 μ „μ œλ‘œ ν•©λ‹ˆλ‹€. DaisyUI 의 μ„€μΉ˜ 방법은 비ꡐ적 λ‹¨μˆœν•©λ‹ˆλ‹€. μ•„λž˜μ˜ 이미지와 같이, npm 을 톡해 Daisyui λ₯Ό μ„€μΉ˜ν•˜κ³  tailwind.config.cjs 의 plugins 뢀뢄에 require("daisyui") ꡬ문을 μΆ”κ°€ν•˜λ©΄ ν™˜κ²½ 섀정이 μ™„λ£Œλ©λ‹ˆλ‹€. 

좜처 : https://daisyui.com/docs/install/

 

λ””μžμΈ 적용

    DaisyUI 곡식 ν™ˆνŽ˜μ΄μ§€ μ΅œμƒλ‹¨ νŽ˜μ΄μ§€μ—μ„œ μ—¬λŸ¬κ°€μ§€ UI Component λ₯Ό Preview ν˜•νƒœλ‘œ λ³΄μ—¬μ£ΌλŠ”λ°, λ‹Ήμž₯ μ μš©ν•΄λ³΄κ³  싢은 λ§€λ ₯적인 Component μš”μ†Œλ“€μ΄ λˆˆμ— λ•λ‹ˆλ‹€.

좜처 : https://daisyui.com

쑰금 더 λ‹€μ–‘ν•œ Component μ’…λ₯˜μ™€ ꡬ체적인 λ””μžμΈ 적용 방법은 DaisyUI Component νŽ˜μ΄μ§€μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή κ²Œμ‹œκΈ€μ—μ„œλŠ” NavBar (μ΅œμƒλ‹¨ λ„€λΉ„κ²Œμ΄μ…˜λ°”) λ””μžμΈμ„ μ μš©ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

    NavBar Component νŽ˜μ΄μ§€μ—λŠ” λ‹€μ–‘ν•œ NavBar λ””μžμΈ μ˜ˆμ‹œκ°€ μ‘΄μž¬ν•˜λŠ”λ°, μ•„λž˜ μ΄λ―Έμ§€μ˜ νŠΉμ • λ””μžμΈ μ˜ˆμ‹œλ₯Ό SvelteKit 에 μ μš©ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. νŠΉμ • λ””μžμΈ ν…œν”Œλ¦Ώμ˜ Preview 탭은 UI Component λ₯Ό Web 에 μ μš©ν–ˆμ„ λ•Œμ˜ ν˜•νƒœλ₯Ό 미리 λ³΄μ—¬μ€λ‹ˆλ‹€. 

DaisyUI NavBar Component - νŠΉμ • λ””μžμΈ Preview νƒ­

HTML νƒ­μ—μ„œλŠ” Preview νƒ­μ—μ„œ λ³Έ λ””μžμΈμ΄ HTML (w/ CSS) ν˜•νƒœλ‘œ μ •λ¦¬λ˜μ–΄ μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. (HTML Tag (<div> λ“±) 의 class ꡬ문을 보면, TailwindCSS 문법 ν˜•νƒœκ°€ μ μš©λ˜μ–΄ μžˆλŠ” 것이 λ³΄μž…λ‹ˆλ‹€.)

DaisyUI NavBar Component - νŠΉμ • λ””μžμΈ Preview νƒ­

ν•΄λ‹Ή μ½”λ“œλ₯Ό λ³΅μ‚¬ν•˜μ—¬ ./src/routes/+layout.svelte νŒŒμΌμ— λΆ™μ—¬ λ„£μŠ΅λ‹ˆλ‹€.

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

<div class="navbar bg-base-100">
	<div class="flex-none">
		<button class="btn btn-square btn-ghost">
			<svg
				xmlns="http://www.w3.org/2000/svg"
				fill="none"
				viewBox="0 0 24 24"
				class="inline-block w-5 h-5 stroke-current"
				><path
					stroke-linecap="round"
					stroke-linejoin="round"
					stroke-width="2"
					d="M4 6h16M4 12h16M4 18h16"
				/></svg
			>
		</button>
	</div>
	<div class="flex-1">
		<!-- svelte-ignore a11y-missing-attribute -->
		<a class="btn btn-ghost normal-case text-xl">daisyUI</a>
	</div>
	<div class="flex-none">
		<button class="btn btn-square btn-ghost">
			<svg
				xmlns="http://www.w3.org/2000/svg"
				fill="none"
				viewBox="0 0 24 24"
				class="inline-block w-5 h-5 stroke-current"
				><path
					stroke-linecap="round"
					stroke-linejoin="round"
					stroke-width="2"
					d="M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z"
				/></svg
			>
		</button>
	</div>
</div>

<slot />

κΈ°μ‘΄ ν™ˆνŽ˜μ΄μ§€ ν™”λ©΄

+layout.svelte νŒŒμΌμ— μž‘μ„±λœ μ½”λ“œλŠ” 전체 Web ν™”λ©΄ ꡬ쑰에 영ν–₯을 λ―ΈμΉ˜λ―€λ‘œ 기쑴에 μž‘μ„±ν–ˆλ˜ ν™ˆνŽ˜μ΄μ§€ 컨텐츠 상단에 λ„€λΉ„κ²Œμ΄μ…˜λ°”κ°€ μƒκΈ°λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

DaisyUI - NavBar 적용 이후 ν™ˆνŽ˜μ΄μ§€ ν™”λ©΄

 

λ””μžμΈ μ»€μŠ€ν„°λ§ˆμ΄μ§•

    DaisyUI Component λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„, TailwindCSS 문법 ν˜Ήμ€ DaisyUI 제곡 속성을 μ‚¬μš©ν•˜μ—¬ λ””μžμΈμ„ μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (DaisyUI λ₯Ό ν™œμš©ν•˜λ”λΌλ„ μ›ν•˜λŠ” λ””μžμΈμ„ κ΅¬ν˜„ν•˜λ €λ©΄ 기본적으둜 TailwindCSS 문법을 μˆ™μ§€ν•΄μ•Ό ν•œλ‹€λŠ” 것을 λ‹€μ‹œ ν•œλ²ˆ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.) μ•„λž˜μ˜ μ½”λ“œλΈ”λŸ­μ€ ./src/routes/+layout.svelte 파일 쀑, λ„€λΉ„κ²Œμ΄μ…˜λ°”μ˜ 쒌츑 ν™ˆνŽ˜μ΄μ§€ 제λͺ© 뢀뢄에 λŒ€ν•œ λ³€κ²½ μ˜ˆμ‹œμž…λ‹ˆλ‹€. κ³΅ν†΅μ μœΌλ‘œ, κΈ°λ³Έ ν…œν”Œλ¦Ώμ—μ„œ 제λͺ©μ„ 'daisyUI' μ—μ„œ 'GNGB-tech-blog' 둜 λ³€κ²½ν•˜μ˜€κ³  λ²„νŠΌ 색상을 λΆ€μ—¬ν–ˆμŠ΅λ‹ˆλ‹€. 첫 번째 μ˜ˆμ‹œλŠ” class ꡬ문을 TailwindCSS λ¬Έλ²•μœΌλ‘œ, 두 번째 μ˜ˆμ‹œλŠ” DaisyUI 제곡 μ†μ„±μœΌλ‘œ μ»€μŠ€ν„°λ§ˆμ΄μ§• ν•˜μ˜€μŠ΅λ‹ˆλ‹€. DaisyUI 의 λ²„νŠΌ Component 제곡 속성은 링크된 νŽ˜μ΄μ§€μ—μ„œ 상세사항을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

// κΈ°λ³Έ ν…œν”Œλ¦Ώ
<div class="flex-1">
    <a class="btn btn-ghost normal-case text-xl">daisyUI</a>
</div>

// κΈ°λ³Έ ν…œν”Œλ¦Ώ μ»€μŠ€ν„°λ§ˆμ΄μ§• (w/ TailwindCSS)
<div class="flex-1">
    <button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">GNGB-tech-blog</button>
</div>

// κΈ°λ³Έ ν…œν”Œλ¦Ώ μ»€μŠ€ν„°λ§ˆμ΄μ§• (w/ DaisyUI 제곡 속성)
<div class="flex-1">
	<button class="btn btn-primary normal-case text-xl">GNGB-tech-blog</button>
</div>

Navbar μ»€μŠ€ν„°λ§ˆμ΄μ§• (w/ TailwindCSS) 이후 ν™ˆνŽ˜μ΄μ§€ ν™”λ©΄
Navbar μ»€μŠ€ν„°λ§ˆμ΄μ§• (w/ DaisyUI 제곡 속성) 이후 ν™ˆνŽ˜μ΄μ§€ ν™”λ©΄


λΉ„μ „κ³΅μžκ°€ Svelte λ₯Ό κ³΅λΆ€ν•˜λŠ” κ³Όμ •μ—μ„œ κ²ͺ게 될 μ–΄λ €μ›€κ³Ό μ‹œν–‰μ°©μ˜€λ₯Ό λ¨Όμ € κ²½ν—˜ν•˜κ³ , μ΄μ–΄μ§ˆ κ²Œμ‹œκΈ€μ—μ„œ μ΅œλŒ€ν•œ μ‰½κ²Œ κ³΅μœ ν•΄λ“œλ¦¬κ³ μž ν•©λ‹ˆλ‹€. μž˜λͺ»λœ λ‚΄μš©μ— λŒ€ν•œ μ§€μ μ‚¬ν•­μ΄λ‚˜ λ¬Έμ˜μ‚¬ν•­μ€ μ–Έμ œλ“ μ§€ νŽΈν•˜κ²Œ λŒ“κΈ€λ‘œ λ‚¨κ²¨μ£Όμ‹œκΈΈ λ°”λΌκ² μŠ΅λ‹ˆλ‹€.