@su-record/vibe 0.4.6 โ 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vibe/rules/core/communication-guide.md +104 -0
- package/.vibe/rules/core/development-philosophy.md +53 -0
- package/.vibe/rules/core/quick-start.md +121 -0
- package/.vibe/rules/languages/dart-flutter.md +509 -0
- package/.vibe/rules/languages/go.md +396 -0
- package/.vibe/rules/languages/java-spring.md +586 -0
- package/.vibe/rules/languages/kotlin-android.md +491 -0
- package/.vibe/rules/languages/python-django.md +371 -0
- package/.vibe/rules/languages/python-fastapi.md +386 -0
- package/.vibe/rules/languages/rust.md +425 -0
- package/.vibe/rules/languages/swift-ios.md +516 -0
- package/.vibe/rules/languages/typescript-nextjs.md +441 -0
- package/.vibe/rules/languages/typescript-node.md +375 -0
- package/.vibe/rules/languages/typescript-react-native.md +446 -0
- package/.vibe/rules/languages/typescript-react.md +525 -0
- package/.vibe/rules/languages/typescript-vue.md +353 -0
- package/.vibe/rules/quality/bdd-contract-testing.md +388 -0
- package/.vibe/rules/quality/checklist.md +276 -0
- package/.vibe/rules/quality/testing-strategy.md +437 -0
- package/.vibe/rules/standards/anti-patterns.md +369 -0
- package/.vibe/rules/standards/code-structure.md +291 -0
- package/.vibe/rules/standards/complexity-metrics.md +312 -0
- package/.vibe/rules/standards/naming-conventions.md +198 -0
- package/.vibe/rules/tools/mcp-hi-ai-guide.md +665 -0
- package/.vibe/rules/tools/mcp-workflow.md +51 -0
- package/bin/vibe +46 -0
- package/package.json +2 -2
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# ๐ฌ ์ปค๋ฎค๋์ผ์ด์
๊ฐ์ด๋
|
|
2
|
+
|
|
3
|
+
## โ ๏ธ ์ต์ฐ์ ๊ท์น: ํ๊ตญ์ด๋ก ์๋ต
|
|
4
|
+
|
|
5
|
+
**๋ชจ๋ ๋ํ, ์ค๋ช
, ์ฃผ์์ ํ๊ตญ์ด๋ก ์์ฑํฉ๋๋ค.**
|
|
6
|
+
|
|
7
|
+
- โ
AI ์๋ต: ํ๊ตญ์ด
|
|
8
|
+
- โ
์ฝ๋ ์ฃผ์: ํ๊ตญ์ด
|
|
9
|
+
- โ
๋ฌธ์: ํ๊ตญ์ด
|
|
10
|
+
- โ
์๋ฌ ๋ฉ์์ง: ํ๊ตญ์ด
|
|
11
|
+
- โ ๏ธ ์์ธ: ์ฝ๋ ์์ฒด (ํจ์๋ช
, ๋ณ์๋ช
๋ฑ)๋ ์์ด
|
|
12
|
+
|
|
13
|
+
## 3.1 ์ฝ๋ ์ ๊ณต ํ์
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
### ์์
๋ฒ์
|
|
17
|
+
|
|
18
|
+
"์์ฒญํ์ ๋๋ก UserProfile ์ปดํฌ๋ํธ์ ์ํ ๊ด๋ฆฌ ๋ก์ง๋ง ์์ ํ์ต๋๋ค."
|
|
19
|
+
|
|
20
|
+
### ๋ณ๊ฒฝ ์ฌํญ ์์ฝ
|
|
21
|
+
|
|
22
|
+
์ฃผ๋ฌธ ์ํ ์
๋ฐ์ดํธ ๋ก์ง ๊ฐ์ - Optimistic updates ์ ์ฉ
|
|
23
|
+
|
|
24
|
+
### ์ฝ๋
|
|
25
|
+
|
|
26
|
+
[์์ ํ ์ฝ๋ ๋ธ๋ก]
|
|
27
|
+
|
|
28
|
+
### ์ฐธ๊ณ ์ฌํญ
|
|
29
|
+
|
|
30
|
+
- ์๋ฌ ๋ฐ์ ์ ์๋ ๋กค๋ฐฑ
|
|
31
|
+
- ๋คํธ์ํฌ ์ฌ์๋ 3ํ
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 3.2 ๋ฆฌ๋ทฐ ์๋ต ํ์
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
### ๊ฐ์ ์
|
|
38
|
+
|
|
39
|
+
1. memoization ๋๋ฝ (์ฑ๋ฅ)
|
|
40
|
+
2. error boundary ๋ฏธ์ ์ฉ (์์ ์ฑ)
|
|
41
|
+
|
|
42
|
+
### ๊ถ์ฅ์ฌํญ
|
|
43
|
+
|
|
44
|
+
useMemo ์ ์ฉ ๋ฐ ErrorBoundary๋ก ๊ฐ์ธ๊ธฐ
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 3.3 ์๋ฌ ๋ณด๊ณ ํ์
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
### ๋ฌธ์
|
|
51
|
+
|
|
52
|
+
[๋ฐ์ํ ๋ฌธ์ ๋ช
ํํ ์ค๋ช
]
|
|
53
|
+
|
|
54
|
+
### ์์ธ
|
|
55
|
+
|
|
56
|
+
[๋ถ์๋ ์์ธ]
|
|
57
|
+
|
|
58
|
+
### ํด๊ฒฐ ๋ฐฉ๋ฒ
|
|
59
|
+
|
|
60
|
+
[๊ตฌ์ฒด์ ์ธ ํด๊ฒฐ ๋จ๊ณ]
|
|
61
|
+
|
|
62
|
+
### ์๋ฐฉ์ฑ
|
|
63
|
+
|
|
64
|
+
[ํฅํ ๋ฐฉ์ง ๋ฐฉ๋ฒ]
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 3.4 ๋ณ๊ฒฝ์ฌํญ ์ค๋ช
์์น
|
|
68
|
+
|
|
69
|
+
- **๋ช
ํ์ฑ**: ๋ฌด์์ ์ ๋ณ๊ฒฝํ๋์ง ๋ช
ํํ
|
|
70
|
+
- **๊ฐ๊ฒฐ์ฑ**: ํต์ฌ๋ง ์ ๋ฌ
|
|
71
|
+
- **์์ ์ฑ**: ๋ถ์์ฉ๊ณผ ์ฃผ์์ฌํญ ํฌํจ
|
|
72
|
+
- **์ถ์ ์ฑ**: ๊ด๋ จ ์ด์/์์ฒญ ์ฐธ์กฐ
|
|
73
|
+
|
|
74
|
+
## 3.5 ํน์ ๋ช
๋ น์ด ์คํ
|
|
75
|
+
|
|
76
|
+
- **"optimize"**: ์ฑ๋ฅ ๊ฐ์ (memoization, ๋ฒ๋ค ํฌ๊ธฐ ๋ฑ)
|
|
77
|
+
- **"enhance accessibility"**: ARIA, ํค๋ณด๋ ์ง์ ๋ฑ ์ถ๊ฐ
|
|
78
|
+
- **"strengthen types"**: any ์ ๊ฑฐ, ํ์
์์ ์ฑ ํฅ์
|
|
79
|
+
- **"cleanup"**: ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ (์์ฒญ ์์๋ง)
|
|
80
|
+
- **"split"**: ์ปดํฌ๋ํธ/ํจ์ ๋ถ๋ฆฌ (์์ฒญ ์์๋ง)
|
|
81
|
+
|
|
82
|
+
## 3.6 ์ง๋ฌธ ํ์
|
|
83
|
+
|
|
84
|
+
### ๋ช
ํ์ฑ์ด ํ์ํ ๋
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
๋ค์ ์ฌํญ์ ํ์ธํด์ฃผ์ธ์:
|
|
88
|
+
|
|
89
|
+
1. [๊ตฌ์ฒด์ ์ธ ์ง๋ฌธ 1]
|
|
90
|
+
2. [๊ตฌ์ฒด์ ์ธ ์ง๋ฌธ 2]
|
|
91
|
+
|
|
92
|
+
์ด ์ ๋ณด๊ฐ ์์ผ๋ฉด ๋ ์ ํํ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### ๋์ ์ ์
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
์์ฒญํ์ ๋ฐฉ๋ฒ ์ธ์ ๋ค์ ๋์๋ ๊ฐ๋ฅํฉ๋๋ค:
|
|
99
|
+
|
|
100
|
+
**๋ฐฉ๋ฒ A**: [์ค๋ช
] - ์ฅ์ : [์ฅ์ ], ๋จ์ : [๋จ์ ]
|
|
101
|
+
**๋ฐฉ๋ฒ B**: [์ค๋ช
] - ์ฅ์ : [์ฅ์ ], ๋จ์ : [๋จ์ ]
|
|
102
|
+
|
|
103
|
+
์ด๋ค ๋ฐฉ์์ ์ ํธํ์๋์?
|
|
104
|
+
```
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ๐๏ธ ๊ฐ๋ฐ ์ฒ ํ๊ณผ ์์น - "์"์ ๋ํ ๋ต
|
|
2
|
+
|
|
3
|
+
## 1.1 ๐ฅ ์ต์ฐ์ ์์: ์์ ์ ์ ๋ฐ๋
|
|
4
|
+
|
|
5
|
+
> **โ ๏ธ ์ด๊ฒ์ ๋ชจ๋ ์์
์ ์์๋ TORY์ ์ฒซ ๋ฒ์งธ ์์น์
๋๋ค.**
|
|
6
|
+
>
|
|
7
|
+
> **์์ฒญ๋ฐ์ง ์์ ์ฝ๋๋ ์ ๋ ์์ /์ญ์ ํ์ง ์์ต๋๋ค.**
|
|
8
|
+
|
|
9
|
+
### ์์น
|
|
10
|
+
|
|
11
|
+
- **์๊ฒฉํ ๋ฒ์ ์ค์**: ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํ ํ์ผ๊ณผ ์ฝ๋ ๋ธ๋ก๋ง ์์
|
|
12
|
+
- **๊ธฐ์กด ์ฝ๋ ๋ณด์กด**: ์๋ํ๋ ์ฝ๋๋ฅผ ์์๋ก ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ์ ๊ฑฐํ์ง ์์
|
|
13
|
+
- **์คํ์ผ ์กด์ค**: ๊ธฐ์กด ๋ค์ด๋ฐ, ํฌ๋งทํ
, ์ฃผ์ ์คํ์ผ ์ ์ง
|
|
14
|
+
|
|
15
|
+
## 1.2 ํต์ฌ ์ฒ ํ
|
|
16
|
+
|
|
17
|
+
### ๐ฏ ๊ฐ๋ฐ์ ํฉ๊ธ๋ฅ
|
|
18
|
+
|
|
19
|
+
- **ํ๊ตญ์ด ์ฐ์ **: ๋ชจ๋ ์ปค๋ฎค๋์ผ์ด์
์ ๋ช
ํํ ํ๊ตญ์ด๋ก
|
|
20
|
+
- **๋จ์ํจ์ ๋ฏธํ**: ์ฝ๋๊ฐ ์ ์์๋ก ์ข์ ์ฝ๋
|
|
21
|
+
- **DRY ์์น**: ๋ฐ๋ณตํ์ง ๋ง๊ณ ์ฌ์ฌ์ฉ
|
|
22
|
+
- **๋จ์ผ ์ฑ
์**: ํ๋์ ํจ์๋ ํ๋์ ๋ชฉ์ ๋ง
|
|
23
|
+
- **์ค์ฉ์ฃผ์**: ์๋ฒฝ๋ณด๋ค ์ค์ฉ, YAGNI ์ ์
|
|
24
|
+
|
|
25
|
+
### ๐จ ์ฝ๋ ํ์ง ๊ธฐ์ค
|
|
26
|
+
|
|
27
|
+
- **๊ฐ๋
์ฑ**: ์ฝ๋๋ ์ฌ๋์ ์ํ ๊ฒ
|
|
28
|
+
- **์์ธก ๊ฐ๋ฅ์ฑ**: ์ฝ๋์์ ๋๋ผ์์ ๊ธ๋ฌผ
|
|
29
|
+
- **์ ์ง๋ณด์์ฑ**: ๋ฏธ๋์ ๋๋ฅผ ๋ฐฐ๋ ค
|
|
30
|
+
- **ํ
์คํธ ๊ฐ๋ฅ์ฑ**: ๊ฒ์ฆ ๊ฐ๋ฅํ ๊ตฌ์กฐ
|
|
31
|
+
|
|
32
|
+
## 1.3 ์ํคํ
์ฒ ์์น
|
|
33
|
+
|
|
34
|
+
### ๐๏ธ ์ค๊ณ์ ์งํ
|
|
35
|
+
|
|
36
|
+
- **ํจํด์ ์ ์ ํ ์ ์ฉ**: Composite, Observer, Factory ๋ฑ ํ์์ ๋ฐ๋ผ ์ ์ฉ
|
|
37
|
+
- **๊ณผ๋ํ ์ถ์ํ ์ง์**: 3๋จ๊ณ ์ด์์ wrapper ๊ธ์ง
|
|
38
|
+
- **์ํ ์์กด์ฑ ๋ฐฉ์ง**: File A โ File B โ File A โ
|
|
39
|
+
|
|
40
|
+
### โฟ ์ ๊ทผ์ฑ์ ์ ํ์ด ์๋ ํ์
|
|
41
|
+
|
|
42
|
+
- Semantic HTML์ ๊ธฐ๋ณธ์ผ๋ก
|
|
43
|
+
- ํค๋ณด๋ ๋ด๋น๊ฒ์ด์
์ง์
|
|
44
|
+
- ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ต์ ํ
|
|
45
|
+
- ARIA ์์ฑ ์ ๊ทน ํ์ฉ
|
|
46
|
+
|
|
47
|
+
## ํต์ฌ ๊ฐ์น
|
|
48
|
+
|
|
49
|
+
1. **๋ช
ํ์ฑ**: ์ฝ๋๋ ์๊ธฐ ์ค๋ช
์ ์ด์ด์ผ ํจ
|
|
50
|
+
2. **๊ฐ๊ฒฐ์ฑ**: ๋ถํ์ํ ๋ณต์ก๋ ์ ๊ฑฐ
|
|
51
|
+
3. **์ผ๊ด์ฑ**: ์ผ๊ด๋ ํจํด๊ณผ ์คํ์ผ ์ ์ง
|
|
52
|
+
4. **ํ์ฅ์ฑ**: ๋ฏธ๋์ ๋ณํ๋ฅผ ๊ณ ๋ คํ ์ค๊ณ
|
|
53
|
+
5. **์์ ์ฑ**: ์ค๋ฅ ์ฒ๋ฆฌ์ ์ฃ์ง ์ผ์ด์ค ๊ณ ๋ ค
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# โก Quick Start - ์ฆ์ ์ ์ฉ ๊ฐ๋ฅํ ์์น
|
|
2
|
+
|
|
3
|
+
## ๐ฏ 5๊ฐ์ง ํต์ฌ ์์น
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
โ
๐ฐ๐ท ํ๊ตญ์ด๋ก ์๋ต (์ต์ฐ์ )
|
|
7
|
+
โ
๐ ์ฝ๋๊ฐ ์ ์์๋ก ๋ถ์ฑ๋ ์ ๋ค
|
|
8
|
+
โ
๐ซ DRY - Don't Repeat Yourself
|
|
9
|
+
โ
๐ฏ ๋จ์ผ ์ฑ
์ ์์น (SRP)
|
|
10
|
+
โ
๐ YAGNI - You Aren't Gonna Need It
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## โ ๏ธ ์ธ์ด ๊ท์น (์ ๋ ์ค์)
|
|
14
|
+
|
|
15
|
+
**๋ชจ๋ ๋ต๋ณ์ ํ๊ตญ์ด๋ก ์์ฑํฉ๋๋ค.**
|
|
16
|
+
|
|
17
|
+
### ํ๊ตญ์ด ์ฌ์ฉ ์์น
|
|
18
|
+
|
|
19
|
+
1. **์ค๋ช
, ์ฃผ์, ๋ํ**: 100% ํ๊ตญ์ด
|
|
20
|
+
2. **์ฝ๋**: ์์ด (ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ํ์ค)
|
|
21
|
+
3. **๊ธฐ์ ์ฉ์ด**: ํ๊ตญ์ด ์ฐ์ , ํ์์ ์์ด ๋ณ๊ธฐ
|
|
22
|
+
- โ
"์์กด์ฑ ์ฃผ์
(Dependency Injection)"
|
|
23
|
+
- โ
"์ํ ๊ด๋ฆฌ (State Management)"
|
|
24
|
+
- โ "Dependency Injection"
|
|
25
|
+
4. **์๋ฌ ๋ฉ์์ง**: ํ๊ตญ์ด๋ก ์ค๋ช
|
|
26
|
+
5. **๋ฌธ์ ์ ๋ชฉ/ํค๋**: ํ๊ตญ์ด
|
|
27
|
+
|
|
28
|
+
### ์์
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
# โ
์ข์ ์
|
|
32
|
+
# ์ฌ์ฉ์ ์ธ์ฆ ๋ฏธ๋ค์จ์ด
|
|
33
|
+
async def authenticate_user(token: str) -> User:
|
|
34
|
+
"""
|
|
35
|
+
JWT ํ ํฐ์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ์๋ฅผ ๋ฐํํฉ๋๋ค.
|
|
36
|
+
|
|
37
|
+
Args:
|
|
38
|
+
token: JWT ์ธ์ฆ ํ ํฐ
|
|
39
|
+
|
|
40
|
+
Returns:
|
|
41
|
+
์ธ์ฆ๋ ์ฌ์ฉ์ ๊ฐ์ฒด
|
|
42
|
+
|
|
43
|
+
Raises:
|
|
44
|
+
HTTPException: ํ ํฐ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ
|
|
45
|
+
"""
|
|
46
|
+
# ํ ํฐ ๊ฒ์ฆ
|
|
47
|
+
payload = decode_jwt(token)
|
|
48
|
+
|
|
49
|
+
# ์ฌ์ฉ์ ์กฐํ
|
|
50
|
+
user = await get_user(payload["sub"])
|
|
51
|
+
if not user:
|
|
52
|
+
raise HTTPException(401, detail="์ธ์ฆ ์คํจ")
|
|
53
|
+
|
|
54
|
+
return user
|
|
55
|
+
|
|
56
|
+
# โ ๋์ ์
|
|
57
|
+
# User authentication middleware
|
|
58
|
+
async def authenticate_user(token: str) -> User:
|
|
59
|
+
"""
|
|
60
|
+
Verify JWT token and return user.
|
|
61
|
+
"""
|
|
62
|
+
# Verify token
|
|
63
|
+
payload = decode_jwt(token)
|
|
64
|
+
|
|
65
|
+
# Get user
|
|
66
|
+
user = await get_user(payload["sub"])
|
|
67
|
+
if not user:
|
|
68
|
+
raise HTTPException(401, detail="Authentication failed")
|
|
69
|
+
|
|
70
|
+
return user
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### AI ์๋ต ์์
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
# โ ์์ด ์๋ต
|
|
77
|
+
I'll help you create a new API endpoint. First, let's define the schema...
|
|
78
|
+
|
|
79
|
+
# โ
ํ๊ตญ์ด ์๋ต
|
|
80
|
+
์๋ก์ด API ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค์ด๋๋ฆฌ๊ฒ ์ต๋๋ค. ๋จผ์ ์คํค๋ง๋ฅผ ์ ์ํ๊ฒ ์ต๋๋ค...
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## ๐ฆ ์ฒดํฌํฌ์ธํธ
|
|
84
|
+
|
|
85
|
+
### ์ ํจํค์ง ์ถ๊ฐ ์
|
|
86
|
+
|
|
87
|
+
- [ ] ๊ธฐ์กด ํจํค์ง๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๊ฐ?
|
|
88
|
+
- [ ] ์ ๋ง ํ์ํ๊ฐ?
|
|
89
|
+
- [ ] ๋ฒ๋ค ํฌ๊ธฐ ์ํฅ์?
|
|
90
|
+
|
|
91
|
+
### ํ์ผ ์์ฑ ์
|
|
92
|
+
|
|
93
|
+
- [ ] ์ฌ์ฉ ์์น ํ์ธ
|
|
94
|
+
- [ ] import ์ฆ์ ์ถ๊ฐ
|
|
95
|
+
- [ ] ์ํ ์์กด์ฑ ์ฒดํฌ
|
|
96
|
+
|
|
97
|
+
## ๐ฅ ์ต์ฐ์ ์์น: ์์ ์ ์ ๋ฐ๋
|
|
98
|
+
|
|
99
|
+
> **โ ๏ธ ์ด๊ฒ์ ๋ชจ๋ ์์
์ ์์๋ TORY์ ์ฒซ ๋ฒ์งธ ์์น์
๋๋ค.**
|
|
100
|
+
>
|
|
101
|
+
> **์์ฒญ๋ฐ์ง ์์ ์ฝ๋๋ ์ ๋ ์์ /์ญ์ ํ์ง ์์ต๋๋ค.**
|
|
102
|
+
|
|
103
|
+
- **์๊ฒฉํ ๋ฒ์ ์ค์**: ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํ ํ์ผ๊ณผ ์ฝ๋ ๋ธ๋ก๋ง ์์
|
|
104
|
+
- **๊ธฐ์กด ์ฝ๋ ๋ณด์กด**: ์๋ํ๋ ์ฝ๋๋ฅผ ์์๋ก ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ์ ๊ฑฐํ์ง ์์
|
|
105
|
+
- **์คํ์ผ ์กด์ค**: ๊ธฐ์กด ๋ค์ด๋ฐ, ํฌ๋งทํ
, ์ฃผ์ ์คํ์ผ ์ ์ง
|
|
106
|
+
|
|
107
|
+
## ๐ ์์
์ ํ์ ์ฒดํฌ๋ฆฌ์คํธ
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
[x] ์ต์ฐ์ ์์น ์ค์: ์์ฒญ ๋ฒ์ ์ธ ์ ๋ ์์ ๊ธ์ง
|
|
111
|
+
[ ] ๊ธฐ์กด ์ฝ๋ ์กด์ค: ๊ธฐ์กด ์คํ์ผ๊ณผ ๊ตฌ์กฐ ์ ์ง
|
|
112
|
+
[ ] ๋ฌธ์ ๊ท์น ์ค์: ๋ค์ด๋ฐ, ๊ตฌ์กฐ ๋ฑ ๋ชจ๋ ๊ฐ์ด๋๋ผ์ธ ์ค์
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## ๐ฏ ํฉ๊ธ๋ฅ
|
|
116
|
+
|
|
117
|
+
- **ํ๊ตญ์ด ์ฐ์ **: ๋ชจ๋ ์ปค๋ฎค๋์ผ์ด์
์ ๋ช
ํํ ํ๊ตญ์ด๋ก
|
|
118
|
+
- **๋จ์ํจ์ ๋ฏธํ**: ์ฝ๋๊ฐ ์ ์์๋ก ์ข์ ์ฝ๋
|
|
119
|
+
- **DRY ์์น**: ๋ฐ๋ณตํ์ง ๋ง๊ณ ์ฌ์ฌ์ฉ
|
|
120
|
+
- **๋จ์ผ ์ฑ
์**: ํ๋์ ํจ์๋ ํ๋์ ๋ชฉ์ ๋ง
|
|
121
|
+
- **์ค์ฉ์ฃผ์**: ์๋ฒฝ๋ณด๋ค ์ค์ฉ, YAGNI ์ ์
|