| name | frontend-prompt-generator |
| description | Generate structured prompts for frontend development tasks following established patterns. Use when the user requests prompts for wireframes, UI implementation, data binding, or routing functionality in React/Next.js projects with specific formatting requirements (Cursor rules, file paths, test-driven development). |
| allowed-tools | ["Read","Grep","Glob"] |
Frontend Prompt Generator
Generate consistent, well-structured prompts for frontend development tasks that follow established patterns for wireframe creation, UI implementation, data binding, and routing functionality.
When to Use This Skill
Use this skill when the user wants to:
- Create prompts for frontend development tasks (wireframes, UI, data binding, routing)
- Generate prompts that follow a specific format with conditions and requirements
- Build prompts for React/Next.js components with TDD approach
- Create prompts for Figma-to-code workflows
- Generate prompts with GraphQL API integration
Prompt Types
This skill supports four main prompt types:
- Wireframe: Create HTML/flexbox wireframe structure with precise dimensions
- UI Implementation: Implement Figma designs into existing wireframes using MCP
- Data Binding: Bind GraphQL API data to components with TDD
- Routing: Add navigation and linking functionality with TDD
How to Use This Skill
Step 1: ์ค๋งํธ ์ ๋ณด ์ถ์ถ ๋ฐ ํ๋กฌํํธ ํ์
๊ฒฐ์
๋จผ์ ์ฌ์ฉ์ ๋ฉ์์ง์์ ์ปจํ
์คํธ๋ฅผ ๋ถ์ํ์ฌ ๋ค์์ ์ถ์ถํฉ๋๋ค:
-
์ปดํฌ๋ํธ๋ช
๊ฐ์ง:
- ์ฌ์ฉ์๊ฐ ์ธ๊ธํ ์ปดํฌ๋ํธ ์ด๋ฆ ์ฐพ๊ธฐ (์: "boards", "profile", "comments")
- ์์ผ๋ฉด ์ง๋ฌธํ๊ธฐ
-
ํ๋กฌํํธ ํ์
์ถ๋ก :
- "์์ด์ดํ๋ ์", "๊ตฌ์กฐ", "๋ ์ด์์" โ Wireframe
- "ํผ๊ทธ๋ง", "๋์์ธ", "UI ๊ตฌํ" โ UI Implementation
- "๋ฐ์ดํฐ", "๋ฐ์ธ๋ฉ", "API", "GraphQL" โ Data Binding
- "ํด๋ฆญ", "์ด๋", "๋ผ์ฐํ
", "๋งํฌ" โ Routing
- ๋ช
ํํ์ง ์์ผ๋ฉด ์ฌ์ฉ์์๊ฒ ์ ํ์ง ์ ๊ณต
-
๊ธฐ์กด ํ์ผ ํ์ธ:
src/components/[์ปดํฌ๋ํธ๋ช
]/ ๋๋ ํ ๋ฆฌ ์กด์ฌ ์ฌ๋ถ ํ์ธ
- ์์ผ๋ฉด ๊ธฐ์กด ํ์ผ ๊ฒฝ๋ก ์ฌ์ฌ์ฉ, ์์ผ๋ฉด ์๋ก ์์ฑ
Step 2: ํ์
๋ณ ํ์ ์ ๋ณด ์์ง ๋ฐ ๊ฒ์ฆ
๊ฐ ํ๋กฌํํธ ํ์
๋ณ๋ก ํ์ ์ ๋ณด์ ์ ํ ์ ๋ณด๋ฅผ ๊ตฌ๋ถํ์ฌ ์์งํฉ๋๋ค.
2.1 Wireframe ํ๋กฌํํธ
ํ์ ์ ๋ณด:
- โ
์ปดํฌ๋ํธ๋ช
(์: "boards", "profile")
- โ
์ฐ๊ฒฐํ ํ์ด์ง ๊ฒฝ๋ก (์: "src/app/boards/page.tsx")
- โ
์์ญ ๊ตฌ์กฐ ๋ฐ ํฌ๊ธฐ (์: "header: 1280 * 80")
์ ํ ์ ๋ณด:
- gap ์์ญ (๊ธฐ๋ณธ๊ฐ: ๊ฐ ์์ญ ์ฌ์ด์ ์๋ ์ถ๊ฐ)
๊ธฐ๋ณธ๊ฐ ์ ์:
- ์ปดํฌ๋ํธ๋ช
์ด "boards"๋ฉด โ ํ์ด์ง ๊ฒฝ๋ก:
src/app/boards/page.tsx
- ์ปดํฌ๋ํธ๋ช
์ด "profile"๋ฉด โ ํ์ด์ง ๊ฒฝ๋ก:
src/app/profile/page.tsx
์
๋ ฅ๊ฐ ๊ฒ์ฆ:
- ์์ญ ํฌ๊ธฐ๋ "์ด๋ฆ: ๋๋น * ๋์ด" ํ์์ด์ด์ผ ํจ
- ๋๋น์ ๋์ด๋ ์ซ์์ฌ์ผ ํจ (๋จ์: px)
2.2 UI Implementation ํ๋กฌํํธ
ํ์ ์ ๋ณด:
- โ
์ปดํฌ๋ํธ๋ช
- โ
Figma ์ฑ๋๋ช
(์: "abc123")
- โ
Figma ๋
ธ๋ ID (์: "123:456")
์ ํ ์ ๋ณด:
- ์์ (UI ๊ตฌํ์ ํ์ ์ ๋ณด๋ง์ผ๋ก ์ถฉ๋ถ)
๊ธฐ๋ณธ๊ฐ ์ ์:
- ์ปดํฌ๋ํธ๋ช
์์ ํ์ผ ๊ฒฝ๋ก ์๋ ์์ฑ
์
๋ ฅ๊ฐ ๊ฒ์ฆ:
- ๋
ธ๋ ID๋ "์ซ์:์ซ์" ํ์์ด์ด์ผ ํจ (์: "123:456", "1:2")
- ์๋ชป๋ ํ์์ด๋ฉด ์ฌ์์ฒญ
2.3 Data Binding ํ๋กฌํํธ
ํ์ ์ ๋ณด:
- โ
์ปดํฌ๋ํธ๋ช
- โ
API ์ฟผ๋ฆฌ๋ช
(์: "fetchBoards", "FETCH_BOARD")
- โ
GraphQL ์ฟผ๋ฆฌ ๊ตฌ์กฐ
- โ
ํ๋ ๋งคํ (ํ๋ฉด ํ๋ โ API ํ๋)
์ ํ ์ ๋ณด:
- ํน์ ์ฒ๋ฆฌ ๊ท์น (text overflow, ๋ ์ง ํฌ๋งท ๋ฑ)
- CSS ์ฒ๋ฆฌ ์๊ตฌ์ฌํญ
- ํ
์คํธ ์๋๋ฆฌ์ค
๊ธฐ๋ณธ๊ฐ ์ ์:
- ์ปดํฌ๋ํธ๊ฐ "boards"๋ฉด โ API: "fetchBoards" ๋๋ "FETCH_BOARDS"
- ํ๋๋ช
์ด ์ ์ฌํ๋ฉด ์๋ ๋งคํ ์ ์ (์: title โ title, writer โ author)
์
๋ ฅ๊ฐ ๊ฒ์ฆ:
- GraphQL ์ฟผ๋ฆฌ ๊ตฌ์กฐ๊ฐ ์ ํจํ์ง ํ์ธ
- ํ๋ ๋งคํ์ด ๋ช
ํํ์ง ํ์ธ
2.4 Routing ํ๋กฌํํธ
ํ์ ์ ๋ณด:
- โ
์ปดํฌ๋ํธ๋ช
- โ
ํด๋ฆญ ๊ฐ๋ฅํ ์์ ์ค๋ช
(์: "๊ฒ์๊ธ", "์นด๋")
- โ
๋ผ์ฐํ
์ ์ฌ์ฉํ ID ํ๋๋ช
(์: "boardId", "postId")
- โ
๋ชฉ์ ์ง ํ์ด์ง ํจํด (์: "/boards/[boardId]")
์ ํ ์ ๋ณด:
- ๋ก์ปฌ์คํ ๋ฆฌ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ (ํ์ํ ๊ฒฝ์ฐ๋ง)
๊ธฐ๋ณธ๊ฐ ์ ์:
- ์ปดํฌ๋ํธ๊ฐ "boards"๋ฉด โ ID ํ๋: "boardId", ๊ฒฝ๋ก: "/boards/[boardId]"
- ์ปดํฌ๋ํธ๊ฐ "posts"๋ฉด โ ID ํ๋: "postId", ๊ฒฝ๋ก: "/posts/[postId]"
์
๋ ฅ๊ฐ ๊ฒ์ฆ:
- ๊ฒฝ๋ก ํจํด์ ๋์ ์ธ๊ทธ๋จผํธ๊ฐ ์๋์ง ํ์ธ (์: [id])
- ID ํ๋๋ช
์ด ์ ํจํ ๋ณ์๋ช
์ธ์ง ํ์ธ
Step 3: ๋ํํ ์ ๋ณด ์์ง ํ๋ก์ธ์ค
์ ๋ณด๊ฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ:
- Step 4๋ก ์ฆ์ ์งํํ์ฌ ํ๋กฌํํธ ์์ฑ
์ ๋ณด๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ:
- ๋ถ์กฑํ ํ์ ์ ๋ณด๋ฅผ ๋ช
ํํ๊ฒ ๋์ด
- ๊ฐ ์ ๋ณด์ ๋ํด ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ๋ฉฐ ์ง๋ฌธ
- ์์ ํ์๊ณผ ํจ๊ป ์ค๋ช
์ง๋ฌธ ์์:
[Wireframe ํ๋กฌํํธ ์์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ์์งํ๊ฒ ์ต๋๋ค]
1. ์ปดํฌ๋ํธ๋ช
: boards
โ
ํ์ธ๋จ
2. ์ฐ๊ฒฐํ ํ์ด์ง ๊ฒฝ๋ก:
๐ก ์ ์: src/app/boards/page.tsx
์ด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? ๋ค๋ฅธ ๊ฒฝ๋ก๊ฐ ํ์ํ๋ฉด ์๋ ค์ฃผ์ธ์.
3. ์์ญ ๊ตฌ์กฐ ๋ฐ ํฌ๊ธฐ:
โ ํ์ํฉ๋๋ค. ๋ค์ ํ์์ผ๋ก ์๋ ค์ฃผ์ธ์:
์์:
- header: 1280 * 80
- content: 1280 * 600
- footer: 1280 * 120
์ฌ์ง๋ฌธ ์ ๊ท์น:
- ์ด๋ฏธ ์ ๊ณต๋ ์ ๋ณด๋ ๋ค์ ๋ฌป์ง ์์
- ์๋ชป๋ ํ์์ธ ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ ์์ ์ ๊ณต
- ํ ๋ฒ์ ์ต๋ 3๊ฐ ์ ๋ณด๊น์ง๋ง ์ง๋ฌธ (์ฌ์ฉ์ ํผ๋ก๋ ๋ฐฉ์ง)
Step 4: ์ปจํ
์คํธ ๊ธฐ๋ฐ ์ถ๋ก ๋ฐ ๊ฒ์ฆ
์์งํ ์ ๋ณด๋ฅผ ๊ฒ์ฆํ๊ณ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ถ๋ก ํฉ๋๋ค:
-
ํ์ผ ๊ฒฝ๋ก ์๋ ์์ฑ:
- TSX:
src/components/[์ปดํฌ๋ํธ๋ช
]/index.tsx
- CSS:
src/components/[์ปดํฌ๋ํธ๋ช
]/styles.module.css
- HOOK:
src/components/[์ปดํฌ๋ํธ๋ช
]/hooks/[๊ธฐ๋ฅ๋ช
].hook.ts
- TEST:
src/components/[์ปดํฌ๋ํธ๋ช
]/tests/[๊ธฐ๋ฅ๋ช
].spec.ts
-
๊ธฐ์กด ์ฝ๋ ํ์ธ (Data Binding, Routing ํ์
):
- ์ปดํฌ๋ํธ ๋๋ ํ ๋ฆฌ์์ ๊ธฐ์กด GraphQL ์ฟผ๋ฆฌ ์ฐพ๊ธฐ
- ๊ธฐ์กด ํ์
์ ์ ํ์ธ
- ์ด๋ฏธ ๋ฐ์ธ๋ฉ๋ ํ๋ ํ์ธ
-
์
๋ ฅ๊ฐ ํ์ ๊ฒ์ฆ:
- Figma ๋
ธ๋ ID: ์ ๊ท์
^\d+:\d+$ ๋งค์นญ ํ์ธ
- ์์ญ ํฌ๊ธฐ:
์ด๋ฆ: ์ซ์ * ์ซ์ ํ์ ํ์ธ
- GraphQL ์ฟผ๋ฆฌ: ๊ธฐ๋ณธ ๋ฌธ๋ฒ ๊ฒ์ฆ
-
๊ฒ์ฆ ์คํจ ์:
- ๊ตฌ์ฒด์ ์ธ ์ค๋ฅ ๋ฉ์์ง์ ์ฌ๋ฐ๋ฅธ ์์ ์ ๊ณต
- ์ฌ์
๋ ฅ ์์ฒญ
Step 5: ํ
ํ๋ฆฟ ์ฝ๊ธฐ
ํ๋กฌํํธ ์์ฑ ์ ํญ์ ํ
ํ๋ฆฟ ํ์ผ์ ์ฝ์ต๋๋ค:
Read .claude/skills/frontend-prompt-generator/references/prompt-templates.md
Read .claude/skills/frontend-prompt-generator/references/examples.md
Step 6: ํ๋กฌํํธ ์์ฑ
ํ
ํ๋ฆฟ์ ์ ํํ ํ์์ ๋ฐ๋ผ ํ๋กฌํํธ๋ฅผ ์์ฑํฉ๋๋ค:
- ํ์ค ํค๋๋ก ์์
- ์กฐ๊ฑด ์น์
์ ์ฌ๋ฐ๋ฅธ ๋ค์ฌ์ฐ๊ธฐ๋ก ์ถ๊ฐ
- ํต์ฌ์๊ตฌ์ฌํญ ์น์
์ถ๊ฐ
- ์ ํํ ๊ตฌ๋ถ์ ์ฌ์ฉ (46๊ฐ ๋ฑํธ)
- ์ผ๊ด๋ ๋ค์ฌ์ฐ๊ธฐ ์ ์ง (ํ์ ํญ๋ชฉ 16์นธ)
- ์ฌ๋ฐ๋ฅธ ๋ฒํธ ํ์ ์ฌ์ฉ
ํ์ง ์ฒดํฌ๋ฆฌ์คํธ:
Step 7: ์ต์ข
ํ์ธ ๋ฐ ์ ์
์์ฑ๋ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ์ํ๊ณ :
-
์์ฑ ๊ฒฐ๊ณผ ์์ฝ:
- ํ๋กฌํํธ ํ์
- ์ฃผ์ ์ค์ (์ปดํฌ๋ํธ๋ช
, ํ๊ฒ ํ์ผ ๋ฑ)
- ์ ์ฉ๋ ๊ธฐ๋ณธ๊ฐ
-
์์ ์ ์ ๋ฐ๊ธฐ:
- "ํ๋กฌํํธ๋ฅผ ์์ ํ์๊ฒ ์ต๋๊น?"
- "์ถ๊ฐ๋ก ์์ฑํ ํ๋กฌํํธ๊ฐ ์๋์?" (์: ์์ด์ดํ๋ ์ โ UI โ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ)
- "๋ค๋ฅธ ํ์
์ ํ๋กฌํํธ๊ฐ ํ์ํ์ ๊ฐ์?"
-
์ํฌํ๋ก์ฐ ์ ์:
- Wireframe ์์ฑ ํ โ UI Implementation ์ ์
- UI Implementation ํ โ Data Binding ์ ์
- Data Binding ํ โ Routing ์ ์
ํต์ฌ ํฌ๋งทํ
๊ท์น
- ๊ตฌ๋ถ์ : ์ ํํ 46๊ฐ ๋ฑํธ (
==============================================)
- ๋ค์ฌ์ฐ๊ธฐ: ํ์ ํญ๋ชฉ 16์นธ, ํ์์ ํ์ 20์นธ
- ๋ฒํธ ํ์: ์ต์์
1), 2), ํ์ 1-1), 1-2)
- ์ปค์๋ฃฐ: ํญ์
@01-common.mdc ํฌํจ + ์์
๋ณ ์ถ๊ฐ ๋ฃฐ
- ํ์ผ ๊ฒฝ๋ก:
src/components/[์ปดํฌ๋ํธ๋ช
]/[ํ์ผํ์
] ํจํด
- ๊ฐ์กฐ: ์ค์ ๊ธ์ง์ฌํญ์
**์ค์๊ธ์ง์ฌํญ** ์ฌ์ฉ
์ปค์๋ฃฐ ํจํด
- Wireframe:
@01-common.mdc, @02-wireframe.mdc
- UI:
@01-common.mdc, @02-wireframe.mdc, @03-ui.mdc
- Functionality:
@01-common.mdc, @04-func.mdc
ํ๋กฌํํธ ๊ณตํต ๊ตฌ์ฑ์์
๋ชจ๋ ํ๋กฌํํธ๋ ๋ค์์ ํฌํจํฉ๋๋ค:
- ์์ ์ง์นจ ๋ผ์ธ
- ์ฒดํฌ๋ฆฌ์คํธ ๋ฐํ ์๊ตฌ์ฌํญ
- ์กฐ๊ฑด ์น์
(์ปค์๋ฃฐ, ํ์ผ ๊ฒฝ๋ก ๋ฑ)
- ํต์ฌ์๊ตฌ์ฌํญ ์น์
- TDD ๋ช
์ธ (๊ธฐ๋ฅ ํ๋กฌํํธ์ ๊ฒฝ์ฐ)
์ค์ ๋์ ์์
์์ 1: ์ ๋ณด๊ฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ (์ฆ์ ์์ฑ)
์ฌ์ฉ์ ์
๋ ฅ:
"boards ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ํ๋กฌํํธ ๋ง๋ค์ด์ค. fetchBoards API ์ฌ์ฉํ๊ณ , ์ ๋ชฉ์ด๋ ์์ฑ์๋ ๋ ์ง ๋ฐ์ธ๋ฉํ ๊ฑฐ์ผ."
์คํฌ ๋์:
- โ
์ปดํฌ๋ํธ๋ช
๊ฐ์ง: "boards"
- โ
ํ๋กฌํํธ ํ์
์ถ๋ก : Data Binding
- โ
API ์ฟผ๋ฆฌ๋ช
: "fetchBoards"
- โ
ํ๋ ๋งคํ: ์ ๋ชฉ, ์์ฑ์, ๋ ์ง
- ๊ธฐ์กด ์ฝ๋ ํ์ธ โ GraphQL ์ฟผ๋ฆฌ ์ฐพ๊ธฐ
- ์ฆ์ ํ๋กฌํํธ ์์ฑ ๋ฐ ์ ์
์์ 2: ์ ๋ณด๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ (๋ํํ)
์ฌ์ฉ์ ์
๋ ฅ:
"profile ํ์ด์ง ์์ด์ดํ๋ ์ ํ๋กฌํํธ ๋ง๋ค์ด์ค"
์คํฌ ์๋ต:
[Wireframe ํ๋กฌํํธ ์์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ์์งํ๊ฒ ์ต๋๋ค]
1. ์ปดํฌ๋ํธ๋ช
: profile
โ
ํ์ธ๋จ
2. ์ฐ๊ฒฐํ ํ์ด์ง ๊ฒฝ๋ก:
๐ก ์ ์: src/app/profile/page.tsx
์ด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
3. ์์ญ ๊ตฌ์กฐ ๋ฐ ํฌ๊ธฐ:
โ ํ์ํฉ๋๋ค. ๋ค์ ํ์์ผ๋ก ์๋ ค์ฃผ์ธ์:
์์:
- header: 1280 * 80
- content: 1280 * 600
์ฌ์ฉ์ ์๋ต:
"๊ฒฝ๋ก๋ ๊ทธ๋๋ก ์ฐ๊ณ , ์์ญ์ header 1280 * 100, main 1280 * 700, footer 1280 * 80์ผ๋ก"
์คํฌ ๋์:
- ๊ฒฝ๋ก ํ์ : src/app/profile/page.tsx
- ์์ญ ํ์ฑ ๋ฐ ๊ฒ์ฆ
- ํ๋กฌํํธ ์์ฑ
์์ 3: ์๋ชป๋ ํ์ ์
๋ ฅ (๊ฒ์ฆ ๋ฐ ์ฌ์์ฒญ)
์ฌ์ฉ์ ์
๋ ฅ:
"boards UI ํ๋กฌํํธ ๋ง๋ค์ด์ค. ๋
ธ๋ ID๋ 123-456"
์คํฌ ์๋ต:
โ ๏ธ Figma ๋
ธ๋ ID ํ์ ์ค๋ฅ
์
๋ ฅํ์ ๊ฐ: 123-456
์ฌ๋ฐ๋ฅธ ํ์: 123:456 (์ฝ๋ก (:)์ผ๋ก ๊ตฌ๋ถ)
Figma์์ ๋
ธ๋ ID๋ฅผ ํ์ธํ์ฌ "์ซ์:์ซ์" ํ์์ผ๋ก ๋ค์ ์
๋ ฅํด์ฃผ์ธ์.
์์: 123:456, 1:2, 999:888
์์ 4: ์ํฌํ๋ก์ฐ ์ ์
์ฌ์ฉ์๊ฐ Wireframe ํ๋กฌํํธ ์์ฑ ์๋ฃ ํ:
์คํฌ ์ ์:
โ
Wireframe ํ๋กฌํํธ๊ฐ ์์ฑ๋์์ต๋๋ค!
๋ค์ ๋จ๊ณ ์ ์:
1. ์ด ํ๋กฌํํธ๋ก ์์ด์ดํ๋ ์์ ๋จผ์ ๊ตฌํํ์ธ์
2. ์๋ฃ ํ "UI ๊ตฌํ ํ๋กฌํํธ ๋ง๋ค์ด์ค"๋ผ๊ณ ์์ฒญํ์๋ฉด
Figma ๋์์ธ์ ์์ด์ดํ๋ ์์ ์ ์ฉํ๋ ํ๋กฌํํธ๋ฅผ ์์ฑํด๋๋ฆฝ๋๋ค
์ถ๊ฐ๋ก ์์ฑํ ํ๋กฌํํธ๊ฐ ์๋์?
์ฐธ๊ณ ๋ฆฌ์์ค
references/prompt-templates.md - ๊ฐ ํ๋กฌํํธ ํ์
๋ณ ์์ธ ํ
ํ๋ฆฟ ํจํด
references/examples.md - ์์ฑ๋ ํ๋กฌํํธ์ ์์ ํ ์์
์ฃผ์์ฌํญ
- ์ฝ๊ธฐ ์ ์ฉ ๋๊ตฌ๋ง ์ฌ์ฉ: ์ด ์คํฌ์ ํ์ผ์ ์์ ํ์ง ์๊ณ ์ฝ๊ธฐ๋ง ํฉ๋๋ค
- ํ
ํ๋ฆฟ ํ์ ์ฐธ์กฐ: ํ๋กฌํํธ ์์ฑ ์ ํญ์ references ํ์ผ์ ์ฝ์ด์ผ ํฉ๋๋ค
- ํ์ ์๊ฒฉ ์ค์: ์์ฑ๋ ํ๋กฌํํธ๋ ์ ํํ ํ์์ ๋ฐ๋ผ์ผ ํฉ๋๋ค
- ์ฌ์ฉ์ ํ์ธ ์ฐ์ : ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ๋ ํญ์ ์ฌ์ฉ์ ํ์ธ์ ๋ฐ์ต๋๋ค