# ๐ŸŽจ SAM MES ๋””์ž์ธ ์‹œ์Šคํ…œ ## ๐Ÿ“– ๊ฐœ์š” SAM MES๋Š” **์•„ํ† ๋ฏน ๋””์ž์ธ ์‹œ์Šคํ…œ**์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ์ค‘์†Œ ๋ฐ ์ค‘๊ฒฌ๊ธฐ์—…์šฉ ์ œ์กฐ์‹คํ–‰์‹œ์Šคํ…œ(MES)์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  UI ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ## ๐Ÿ—‚๏ธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ``` /components/ โ”œโ”€โ”€ ui/ # Shadcn UI ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ โ”‚ โ”œโ”€โ”€ button.tsx โ”‚ โ”œโ”€โ”€ input.tsx โ”‚ โ”œโ”€โ”€ label.tsx โ”‚ โ”œโ”€โ”€ badge.tsx โ”‚ โ”œโ”€โ”€ switch.tsx โ”‚ โ”œโ”€โ”€ checkbox.tsx โ”‚ โ””โ”€โ”€ ... (50+ Shadcn ์ปดํฌ๋„ŒํŠธ) โ”‚ โ”œโ”€โ”€ molecules/ # ๋ถ„์ž (2๊ฐœ ์ด์ƒ์˜ ์›์ž ์กฐํ•ฉ) โ”‚ โ”œโ”€โ”€ FormField.tsx # Label + Input โ”‚ โ”œโ”€โ”€ SearchBar.tsx # Icon + Input โ”‚ โ”œโ”€โ”€ StatCard.tsx # Icon + Label + Value โ”‚ โ”œโ”€โ”€ StatusBadge.tsx # Badge (์ƒ‰์ƒ ์ž๋™ ๋งคํ•‘) โ”‚ โ”œโ”€โ”€ TableActions.tsx # Button ร— 3 (๋ณด๊ธฐ/์ˆ˜์ •/์‚ญ์ œ) โ”‚ โ””โ”€โ”€ IconWithBadge.tsx # Icon + Badge โ”‚ โ”œโ”€โ”€ organisms/ # ์œ ๊ธฐ์ฒด (๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ) โ”‚ โ”œโ”€โ”€ PageHeader.tsx # ํ‘œ์ค€ ํŽ˜์ด์ง€ ํ—ค๋” โญ โ”‚ โ”œโ”€โ”€ StatCards.tsx # StatCard ร— 4 ๊ทธ๋ฆฌ๋“œ โญ โ”‚ โ”œโ”€โ”€ SearchFilter.tsx # SearchBar + ํ•„ํ„ฐ + ์•ก์…˜ โญ โ”‚ โ”œโ”€โ”€ DataTable.tsx # ํ…Œ์ด๋ธ” + ํŽ˜์ด์ง€๋„ค์ด์…˜ โญ โ”‚ โ”œโ”€โ”€ PageLayout.tsx # ํŽ˜์ด์ง€ ๋ž˜ํผ โ”‚ โ”œโ”€โ”€ EmptyState.tsx # ๋นˆ ์ƒํƒœ ํ‘œ์‹œ โ”‚ โ”œโ”€โ”€ FormSection.tsx # ํผ ์„น์…˜ ๊ทธ๋ฃน โ”‚ โ””โ”€โ”€ MobileCard.tsx # ๋ชจ๋ฐ”์ผ ์นด๋“œ โ”‚ โ”œโ”€โ”€ templates/ # ํ…œํ”Œ๋ฆฟ (ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ) โ”‚ โ”œโ”€โ”€ ListPageTemplate.tsx # ๋ชฉ๋ก ํŽ˜์ด์ง€ ๐Ÿ”ฅ โ”‚ โ”œโ”€โ”€ FormPageTemplate.tsx # ํผ ํŽ˜์ด์ง€ โ”‚ โ”œโ”€โ”€ DashboardTemplate.tsx # ๋Œ€์‹œ๋ณด๋“œ ํŽ˜์ด์ง€ โ”‚ โ””โ”€โ”€ TabbedPageTemplate.tsx # ํƒญ ํŽ˜์ด์ง€ โ”‚ โ””โ”€โ”€ DesignSystemManagement.tsx # ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ ํŽ˜์ด์ง€ โœจ /styles/ โ””โ”€โ”€ globals.css # ๋””์ž์ธ ํ† ํฐ (์ƒ‰์ƒ, ํฐํŠธ, ๊ฐ„๊ฒฉ) ``` โญ = ๋ชจ๋“  ํŽ˜์ด์ง€ ํ•„์ˆ˜ ๐Ÿ”ฅ = ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ โœจ = ์‹ ๊ทœ ์ถ”๊ฐ€ ## ๐ŸŽฏ ์•„ํ† ๋ฏน ๋””์ž์ธ ๊ณ„์ธต ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ TEMPLATES โ”‚ โ”‚ (ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ ํ…œํ”Œ๋ฆฟ) โ”‚ โ”‚ ListPageTemplate, FormPageTemplate, etc. โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ORGANISMS โ”‚ โ”‚ (๋ณตํ•ฉ UI ์ปดํฌ๋„ŒํŠธ) โ”‚ โ”‚ PageHeader, StatCards, SearchFilter, etc. โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ MOLECULES โ”‚ โ”‚ (์กฐํ•ฉ๋œ UI ์ปดํฌ๋„ŒํŠธ) โ”‚ โ”‚ FormField, SearchBar, StatCard, etc. โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ATOMS โ”‚ โ”‚ (๊ธฐ๋ณธ UI ์š”์†Œ) โ”‚ โ”‚ Button, Input, Label, Badge, etc. โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“Š ์ปดํฌ๋„ŒํŠธ ํ†ต๊ณ„ | ๊ณ„์ธต | ๊ฐœ์ˆ˜ | ์œ„์น˜ | ์„ค๋ช… | |------|------|------|------| | **Atoms** | 6 | `/components/ui/` | ๊ธฐ๋ณธ UI ์š”์†Œ | | **Molecules** | 6 | `/components/molecules/` | ์กฐํ•ฉ ์ปดํฌ๋„ŒํŠธ | | **Organisms** | 8 | `/components/organisms/` | ๋ณตํ•ฉ ์ปดํฌ๋„ŒํŠธ | | **Templates** | 4 | `/components/templates/` | ํŽ˜์ด์ง€ ํ…œํ”Œ๋ฆฟ | | **์ด๊ณ„** | **24** | - | ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ | ## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘ ### 1. ๋””์ž์ธ ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ์ ‘์† ``` ๋กœ๊ทธ์ธ (SystemAdmin) โ†’ ๊ธฐ์ค€์ •๋ณด ๊ด€๋ฆฌ โ†’ ๋””์ž์ธ์‹œ์Šคํ…œ ``` ### 2. ์ƒˆ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ (3๋ถ„) ```tsx import { ListPageTemplate } from "./components/templates/ListPageTemplate"; import { Database } from "lucide-react"; export function NewPage() { const stats = [ { label: "์ด ๊ฐœ์ˆ˜", value: "100", icon: Database }, // ... 3๊ฐœ ๋” ]; const columns = [ { key: "id", label: "ID" }, { key: "name", label: "์ด๋ฆ„" }, ]; return ( ); } ``` ### 3. ์™„์„ฑ! ๐ŸŽ‰ ํ‘œ์ค€ํ™”๋œ ํŽ˜์ด์ง€๊ฐ€ 3๋ถ„ ์•ˆ์— ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“š ๋ฌธ์„œ ๊ฐ€์ด๋“œ | ๋ฌธ์„œ | ์šฉ๋„ | ๋Œ€์ƒ | |------|------|------| | `DESIGN_SYSTEM_QUICK_REFERENCE.md` | ๋น ๋ฅธ ์ฐธ์กฐ ์นด๋“œ | ๋ชจ๋“  ๊ฐœ๋ฐœ์ž | | `DESIGN_SYSTEM_MANAGEMENT_GUIDE.md` | ์ƒ์„ธ ๊ฐ€์ด๋“œ | ์ž…๋ฌธ์ž | | `DESIGN_SYSTEM_EXAMPLE.md` | ์‹ค์ „ ์˜ˆ์ œ | ์ค‘๊ธ‰์ž | | `COMPONENT_HIERARCHY_REFERENCE.md` | ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต | ๊ณ ๊ธ‰์ž | | `DESIGN_SYSTEM_COMPLETION_SUMMARY.md` | ์™„์„ฑ ์š”์•ฝ | ์ „์ฒด | ## ๐ŸŽจ ํ‘œ์ค€ ํŽ˜์ด์ง€ ๊ตฌ์กฐ ๋ชจ๋“  ํŽ˜์ด์ง€๋Š” ๋‹ค์Œ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค: ```tsx {/* 1. ํ—ค๋” (ํ•„์ˆ˜) */}
{/* 2. ํ†ต๊ณ„ (์„ ํƒ) - ๋Œ€์‹œ๋ณด๋“œ/๋ชฉ๋ก ํŽ˜์ด์ง€ */} {/* 3. ๊ฒ€์ƒ‰/ํ•„ํ„ฐ (์„ ํƒ) - ๋ชฉ๋ก ํŽ˜์ด์ง€ */} {/* 4. ๋ฉ”์ธ ์ปจํ…์ธ  (ํ•„์ˆ˜) */} {/* ๋˜๋Š” */}
...
``` ## ๐Ÿ”ง ๋””์ž์ธ ํ† ํฐ ๋ชจ๋“  ์Šคํƒ€์ผ์€ `/styles/globals.css`์—์„œ ์ค‘์•™ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ### ์ฃผ์š” ํ† ํฐ ```css :root { /* ์ƒ‰์ƒ */ --primary: #3B82F6; /* ์ฃผ์š” ์•ก์…˜ ์ƒ‰์ƒ */ --secondary: #F1F5F9; /* ๋ณด์กฐ ์ƒ‰์ƒ */ --background: #FAFAFA; /* ๋ฐฐ๊ฒฝ */ --destructive: #EF4444; /* ์‚ญ์ œ/๊ฒฝ๊ณ  */ --border: #E2E8F0; /* ํ…Œ๋‘๋ฆฌ */ /* ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ */ --font-family: 'Pretendard'; --font-size: 16px; /* ๊ฐ„๊ฒฉ */ --radius: 0.75rem; /* ๋ชจ์„œ๋ฆฌ ๋‘ฅ๊ธ€๊ธฐ */ } ``` ### ํ† ํฐ ๋ณ€๊ฒฝ ์‹œ ํšจ๊ณผ ```css /* ํ•œ ์ค„๋งŒ ๋ณ€๊ฒฝ */ --primary: #10B981; /* ํŒŒ๋ž€์ƒ‰ โ†’ ์ดˆ๋ก์ƒ‰ */ /* ๊ฒฐ๊ณผ: ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ฒ„ํŠผ, ๋งํฌ, ์•„์ด์ฝ˜์ด ์ž๋™์œผ๋กœ ์ดˆ๋ก์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝ */ ``` ## ๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์ œ ### ์˜ˆ์ œ 1: ํŽ˜์ด์ง€ ํ—ค๋” ```tsx import { PageHeader } from "./components/organisms/PageHeader"; import { Archive } from "lucide-react"; + ํ’ˆ๋ชฉ ๋“ฑ๋ก} /> ``` ### ์˜ˆ์ œ 2: ํ†ต๊ณ„ ์นด๋“œ ```tsx import { StatCards } from "./components/organisms/StatCards"; import { Box, Package, Archive, Layers } from "lucide-react"; ``` ### ์˜ˆ์ œ 3: ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ```tsx import { DataTable } from "./components/organisms/DataTable"; import { StatusBadge } from "./components/molecules/StatusBadge"; }, ]} data={items} onView={handleView} onEdit={handleEdit} onDelete={handleDelete} /> ``` ### ์˜ˆ์ œ 4: ํผ ํ•„๋“œ ```tsx import { FormField } from "./components/molecules/FormField"; ``` ## ๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ ### 1. ์ปดํฌ๋„ŒํŠธ ํƒ์ƒ‰ - โœ… 24๊ฐœ์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๋ชฉ๋ก - โœ… ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ์‚ฌ์šฉ๋ฒ• ์ œ๊ณต - โœ… ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ„๋ฅ˜ - โœ… ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ์ฝ”๋“œ ๋ณต์‚ฌ ### 2. ๋””์ž์ธ ํ† ํฐ ๊ด€๋ฆฌ - โœ… ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ๊ฐ„๊ฒฉ ๊ด€๋ฆฌ - โœ… ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ - โœ… globals.css ์—ฐ๋™ ### 3. ์™„๋ฒฝํ•œ ๋ฌธ์„œํ™” - โœ… ์ƒ์„ธ ๊ฐ€์ด๋“œ ๋ฌธ์„œ - โœ… ์‹ค์ „ ์˜ˆ์ œ - โœ… ๋น ๋ฅธ ์ฐธ์กฐ ์นด๋“œ - โœ… ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต ๊ตฌ์กฐ ### 4. ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ - โœ… IntelliSense ์ง€์› (TypeScript) - โœ… Props ํƒ€์ž… ์ •์˜ - โœ… ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ - โœ… ์ ‘๊ทผ์„ฑ ์ง€์› ## ๐Ÿ“ˆ ํšจ๊ณผ ### ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋‹จ์ถ• - **์ƒˆ ํŽ˜์ด์ง€**: 2์‹œ๊ฐ„ โ†’ 30๋ถ„ (75% โ†“) - **์ปดํฌ๋„ŒํŠธ ๊ฒ€์ƒ‰**: 10๋ถ„ โ†’ 1๋ถ„ (90% โ†“) - **์Šคํƒ€์ผ ์ˆ˜์ •**: 1์‹œ๊ฐ„ โ†’ 5๋ถ„ (92% โ†“) ### ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ - **์žฌ์‚ฌ์šฉ๋ฅ **: 30% โ†’ 80% (167% โ†‘) - **์ผ๊ด€์„ฑ**: ๊ฐœ๋ณ„ ์Šคํƒ€์ผ โ†’ ํ†ตํ•ฉ ๋””์ž์ธ ์‹œ์Šคํ…œ - **์œ ์ง€๋ณด์ˆ˜**: ๊ฐœ๋ณ„ ์ˆ˜์ • โ†’ ์ค‘์•™ ๊ด€๋ฆฌ ### ํ˜‘์—… ํšจ์œจ - **์˜จ๋ณด๋”ฉ**: 2์ฃผ โ†’ 3์ผ (79% โ†“) - **์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜**: ๋ช…ํ™•ํ•œ ๊ณตํ†ต ์–ธ์–ด - **๋””์ž์ธ-๊ฐœ๋ฐœ**: ์›ํ™œํ•œ ํ˜‘์—… ## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ - **Frontend**: React 18, TypeScript - **Styling**: Tailwind CSS v4.0 - **UI Library**: Shadcn UI - **Icons**: Lucide React - **Design System**: Atomic Design ## ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• & ์ ‘๊ทผ์„ฑ - โœ… ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” - โœ… ๋‹คํฌ๋ชจ๋“œ ์ž๋™ ์ง€์› - โœ… ์‹œ๋‹ˆ์–ด๋ชจ๋“œ ์ง€์› - โœ… ํ‚ค๋ณด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜ - โœ… ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์ง€์› - โœ… WCAG 2.1 AA ์ค€์ˆ˜ ## ๐Ÿ”„ ๋ฒ„์ „ - **ํ˜„์žฌ ๋ฒ„์ „**: 1.0.0 - **๋ฆด๋ฆฌ์ฆˆ ๋‚ ์งœ**: 2025-10-31 - **์ƒํƒœ**: โœ… ์•ˆ์ • ๋ฒ„์ „ ## ๐Ÿ‘ฅ ๊ธฐ์—ฌ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ฐœ์„  ์ œ์•ˆ์€ ๊ฐœ๋ฐœํŒ€์— ๋ฌธ์˜ํ•˜์„ธ์š”. ### ์ƒˆ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค 1. ์•„ํ† ๋ฏน ๋””์ž์ธ ๊ณ„์ธต ๊ฒฐ์ • 2. TypeScript ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ 3. ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„ 4. ๋ฌธ์„œ ์ž‘์„ฑ 5. ๋””์ž์ธ ์‹œ์Šคํ…œ ํŽ˜์ด์ง€์— ๋“ฑ๋ก ## ๐Ÿ“ž ๋ฌธ์˜ - **์ด๋ฉ”์ผ**: dev-team@sam-mes.com - **Slack**: #design-system - **๋ฌธ์„œ**: `/DESIGN_SYSTEM_MANAGEMENT_GUIDE.md` ## ๐ŸŽ“ ํ•™์Šต ๊ฒฝ๋กœ ### ์ž…๋ฌธ (1์ผ) 1. `DESIGN_SYSTEM_QUICK_REFERENCE.md` ์ฝ๊ธฐ 2. ๋””์ž์ธ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ํƒ์ƒ‰ 3. ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€ ๋งŒ๋“ค์–ด๋ณด๊ธฐ ### ์ค‘๊ธ‰ (1์ฃผ) 1. `DESIGN_SYSTEM_EXAMPLE.md` ์ฝ๊ธฐ 2. ๊ธฐ์กด ํŽ˜์ด์ง€๋ฅผ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ „ํ™˜ 3. ์ปค์Šคํ…€ Variant ์ถ”๊ฐ€ ### ๊ณ ๊ธ‰ (1๊ฐœ์›”) 1. `COMPONENT_HIERARCHY_REFERENCE.md` ์ฝ๊ธฐ 2. ์ƒˆ ์ปดํฌ๋„ŒํŠธ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„ 3. ๋””์ž์ธ ํ† ํฐ ํ™•์žฅ ## ๐ŸŒŸ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ### DO โœ… - ํ•ญ์ƒ Templates๋ถ€ํ„ฐ ์‹œ์ž‘ - PageHeader๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€์— ์‚ฌ์šฉ - StatusBadge๋กœ ์ƒํƒœ ํ‘œ์‹œ - ๋””์ž์ธ ํ† ํฐ ์‚ฌ์šฉ ### DON'T โŒ - inline style ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ - ์ง์ ‘ ์ƒ‰์ƒ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ธฐ - ํ‘œ์ค€ ๊ตฌ์กฐ ๋ฌด์‹œํ•˜์ง€ ์•Š๊ธฐ - ์ปดํฌ๋„ŒํŠธ ์ค‘๋ณต ์ƒ์„ฑํ•˜์ง€ ์•Š๊ธฐ ## ๐Ÿš€ ๋‹ค์Œ ๋‹จ๊ณ„ 1. **๋””์ž์ธ์‹œ์Šคํ…œ ํŽ˜์ด์ง€ ์ ‘์†** ``` ๊ธฐ์ค€์ •๋ณด ๊ด€๋ฆฌ โ†’ ๋””์ž์ธ์‹œ์Šคํ…œ ``` 2. **์ฒซ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ** - ListPageTemplate ์‚ฌ์šฉ - ์ฝ”๋“œ ๋ณต์‚ฌ ๊ธฐ๋Šฅ ํ™œ์šฉ 3. **๋ฌธ์„œ ์ฝ๊ธฐ** - DESIGN_SYSTEM_QUICK_REFERENCE.md - DESIGN_SYSTEM_EXAMPLE.md 4. **ํŒ€๊ณผ ๊ณต์œ ** - ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ๊ณต์œ  - ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘ --- **Made with โค๏ธ by SAM MES Team** **Powered by Atomic Design System** ๐ŸŽจ **๋””์ž์ธ ์‹œ์Šคํ…œ - ์ผ๊ด€๋˜๊ณ , ํšจ์œจ์ ์ด๋ฉฐ, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ UI**