Sonamu UIλ₯Ό λ ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν μ€μ©μ μΈ νκ³Ό λͺ¨λ² μ¬λ‘λ₯Ό μκ°ν©λλ€.
ν€λ³΄λ λ¨μΆν€
λΉ λ₯Έ μμ
μ μν νμ λ¨μΆν€:
| λ¨μΆν€ | κΈ°λ₯ | μ€λͺ
|
|---|
βK / Ctrl+K | κ²μ | μ 체 κ²μ λͺ¨λ¬ μ΄κΈ° |
Esc | λ«κΈ° | μ΄λ¦° λͺ¨λ¬ λ«κΈ° |
βS / Ctrl+S | μ μ₯ | νμ¬ νΈμ§ λ΄μ© μ μ₯ |
Tab | λ€μ νλ | νΌ μ
λ ₯ μ λ€μ νλλ‘ μ΄λ |
Enter | νμΈ | νΌ μ μΆ λλ νΈμ§ μλ£ |
κ²μ νμ©: βKλ‘ κ²μμ μ΄κ³ Entity μ΄λ¦, νλλͺ
λ±μ λΉ λ₯΄κ² μ°Ύμ μ μμ΅λλ€.
Entity κ΄λ¦¬ ν
1. λΆλͺ¨-μμ Entity ꡬ쑰ν
κ΄λ ¨λ Entityλ€μ λΆλͺ¨-μμ κ΄κ³λ‘ ꡬ쑰ννμΈμ:
Order (λΆλͺ¨)
βββ OrderItem (μμ)
βββ OrderPayment (μμ)
βββ OrderShipment (μμ)
μ₯μ :
- μ¬μ΄λλ°μμ κ³μΈ΅ κ΅¬μ‘°λ‘ νμ
- κ΄λ ¨ Entityλ₯Ό μ½κ² μ°Ύμ μ μμ
- λ
Όλ¦¬μ κ·Έλ£Ήν
2. λͺ
λͺ
κ·μΉ μΌκ΄μ±
| κ΅¬λΆ | κ·μΉ | μμ |
|---|
| Entity ID | PascalCase | User, OrderItem |
| νλλͺ
| snake_case | created_at, user_id |
| Enum | PascalCase | UserRole, OrderStatus |
| Subset ID | λλ¬Έμ | A, B, C |
3. AI μ±ν
νμ©
ν¨κ³Όμ μΈ ν둬ννΈ μμ±:
β λμ μ:
"μ¬μ©μ λ§λ€μ΄μ€"
β
μ’μ μ:
"μ΄μ»€λ¨Έμ€ μ¬μ©μ Entityλ₯Ό λ§λ€μ΄μ€.
νλ: μ΄λ©μΌ(unique), μ΄λ¦, μ νλ²νΈ(nullable),
μν (enum: admin, user, guest),
μμ±μΌ, λ§μ§λ§ λ‘κ·ΈμΈ"
ꡬ체μ μΌλ‘ μμ²:
- νλ νμ
κ³Ό μ μ½μ‘°κ±΄ λͺ
μ
- κ΄κ³ μ€μ μ€λͺ
- μΈλ±μ€ νμ μ¬λΆ μΈκΈ
4. Property μμ μ 리
μλ―Έ μλ μμλ‘ νλλ₯Ό λ°°μΉνμΈμ:
{
properties: [
// 1. Primary Key
{ name: "id", ... },
// 2. ν΅μ¬ μ 보
{ name: "title", ... },
{ name: "content", ... },
// 3. μΈλν€
{ name: "user_id", ... },
{ name: "category_id", ... },
// 4. μν/νλκ·Έ
{ name: "status", ... },
{ name: "is_active", ... },
// 5. νμμ€ν¬ν
{ name: "created_at", ... },
{ name: "updated_at", ... },
]
}
Migration ν
1. μμ λ¨μλ‘ μμ£Ό μ€ν
β λμ μ:
- 10κ° Entity νλ²μ μμ
- 1μ£ΌμΌμ ν λ² λ§μ΄κ·Έλ μ΄μ
β
μ’μ μ:
- 1-2κ° Entityμ© μμ
- ν루μ μ¬λ¬ λ² λ§μ΄κ·Έλ μ΄μ
- κ° λ§μ΄κ·Έλ μ΄μ
ν ν
μ€νΈ
2. Migration Preview νμ©
μ€ν μ λ°λμ Previewλ₯Ό νμΈνμΈμ:
νμΈ μ¬ν:
- β
μΆκ°λλ 컬λΌμ΄ λ§λκ°?
- β οΈ μμ λλ 컬λΌμ μλκ°?
- π νμ
λ³κ²½μ΄ μλν κ²μΈκ°?
3. νλ‘λμ
λ§μ΄κ·Έλ μ΄μ
체ν¬λ¦¬μ€νΈ
β‘ Development DBμμ ν
μ€νΈ μλ£
β‘ Testing DBμμ κ²μ¦ μλ£
β‘ λ°μ΄ν° λ°±μ
μλ£
β‘ λ§μ΄κ·Έλ μ΄μ
Preview νμΈ
β‘ λ‘€λ°± κ³ν μ립
β‘ νμμκ² κ³΅μ§
β‘ Production DB λ§μ΄κ·Έλ μ΄μ
μ€ν
β‘ μ ν리μΌμ΄μ
μ¬μμ λ° νμΈ
Scaffolding ν
1. μΌκ΄ μμ± μ λ΅
νλ‘μ νΈ μ΄κΈ°:
1. λͺ¨λ Entity μ μ
2. [Select All] β Model + Test μΌκ΄ μμ±
3. κ° Modelμ λΉμ¦λμ€ λ‘μ§ μΆκ°
κ°λ° μ€:
1. μ Entity νλλ§ μΆκ°
2. ν΄λΉ Entityλ§ μ ννμ¬ μμ±
3. μ¦μ κ°λ° μμ
2. νμΌ λ°±μ
μ΅κ΄
μ€μν λΉμ¦λμ€ λ‘μ§μ΄ μλ Modelμ μ¬μμ± μ λ°±μ
:
# λ°±μ
cp src/models/User.model.ts src/models/User.model.ts.bak
# μ¬μμ±
[UIμμ Overwrite]
# νμν λ‘μ§ λ³΅μ
3. Git νμ©
μμ±λ νμΌμ λ°λ‘ 컀λ°νμ¬ λ³κ²½ μ΄λ ₯ κ΄λ¦¬:
git add src/models/
git commit -m "Generate models for User, Post, Comment"
Subset νμ© ν
1. νμ€ Subset μ μ
λͺ¨λ Entityμ μΌκ΄λ Subsetμ μ μνμΈμ:
// λͺ¨λ Entityμ κ³΅ν΅ μ μ©
Subset A: λͺ©λ‘μ©
- id
- title (λλ name)
- ν΅μ¬ 1-2κ° νλ
- created_at
Subset B: μμΈμ©
- λͺ¨λ μΌλ° νλ
- λ―Όκ° μ 보 μ μΈ
- νμμ€ν¬ν ν¬ν¨
Subset C: κ΄κ³ ν¬ν¨
- Subset B κΈ°λ°
- νμν κ΄κ³ μΆκ°
2. μ±λ₯ μ΅μ ν
νμν νλλ§ ν¬ν¨:
// β κ³Όλν νλ
{
...λͺ¨λ νλ,
author: "User.C", // Userμ λͺ¨λ κ΄κ³κΉμ§
category: "Category.B",
tags: "Tag.C",
}
// β
μ΅μ ν
{
id: true,
title: true,
content: true,
author: "User.A", // μ΅μ μ 보λ§
category_id: true,
created_at: true,
}
3. APIλ³ Subset μ ν
| API | μΆμ² Subset | μ΄μ |
|---|
| λͺ©λ‘ μ‘°ν | A | λΉ λ₯Έ μλ΅ |
| μμΈ μ‘°ν | B λλ C | μ 체 μ 보 |
| μλμμ± | A (μ΅μν) | μ΄κ³ μ μλ΅ |
| κ΄λ¦¬μ νμ΄μ§ | C | λͺ¨λ μ 보 |
κ²μ νμ©
λΉ λ₯Έ νμ
κ²μ(βK)μΌλ‘ λ€μμ μ°Ύμ μ μμ΅λλ€:
- Entity:
User, Post
- νλ:
email, created_at
- Migration: νμΌλͺ
κ²μ
- Subset:
User.Subset A
κ²μ ν:
user email β User Entityμ email νλ
post migration β Post κ΄λ ¨ λ§μ΄κ·Έλ μ΄μ
subset A β λͺ¨λ Subset A
μν¬νλ‘μ° μ΅μ ν
μ κ· κΈ°λ₯ κ°λ° νλ‘μ°
1. Entity μ μ (Entity ν)
- AI μ±ν
μΌλ‘ λΉ λ₯Έ μμ±
- νλμ κ΄κ³ μ€μ
β
2. Subset μ μ (Entity ν λ΄)
- A, B, C νμ€ Subset μμ±
β
3. Migration μ€ν (Migration ν)
- Preview νμΈ
- Development β Testing μμλ‘ μ€ν
β
4. Scaffolding (Scaffolding ν)
- Model + Test μμ±
β
5. κ°λ° (μ½λ μλν°)
- Model λ©μλ μΆκ°
- API μλν¬μΈνΈ ꡬν
- ν
μ€νΈ μμ±
β
6. Fixture λ±λ‘ (Fixture ν)
- ν
μ€νΈ λ°μ΄ν° μ€λΉ
Entity μμ νλ‘μ°
1. Entity μμ (Entity ν)
- νλ μΆκ°/μμ /μμ
β
2. Migration μμ± νμΈ (Migration ν)
- μλ μμ±λ λ§μ΄κ·Έλ μ΄μ
νμΈ
β
3. Preview κ²ν
- μλν λ³κ²½μ¬νμΈμ§ νμΈ
- λ°μ΄ν° μμ€ μν 체ν¬
β
4. Migration μ€ν
- Development β Testing μμ
β
5. Model μμ (νμ μ)
- νμ
μλ λκΈ°ν νμΈ
- μ νλ νμ© λ‘μ§ μΆκ°
λΈλΌμ°μ κ°λ°μ λꡬ νμ©
Network ν
API νΈμΆμ νμΈνμ¬ λλ²κΉ
:
F12 β Network ν
- λ§μ΄κ·Έλ μ΄μ
μ€ν β /api/migrate/run νμΈ
- Entity μ μ₯ β /api/entity/save νμΈ
- μλ¬ λ°μ μ μλ΅ λ΄μ© νμΈ
Console ν
μλ¬ λ©μμ§ νμΈ:
F12 β Console ν
- JavaScript μλ¬ νμΈ
- API μλ΅ μλ¬ λ‘κ·Έ
- λ€νΈμν¬ μμ² μ€ν¨ μμΈ
λ¬Έμ ν΄κ²°
UIκ° λ릴 λ
μμΈ: λ무 λ§μ Entityλ ν° λ°μ΄ν°
ν΄κ²°:
- λΈλΌμ°μ μΊμ μμ
- λΆνμν λΈλΌμ°μ ν λ«κΈ°
- Sonamu UI μ¬μμ
λ³κ²½μ¬νμ΄ λ°μλμ§ μμ λ
ν΄κ²°:
- λΈλΌμ°μ μλ‘κ³ μΉ¨ (
F5)
- νλ 리λ‘λ (
ββ§R / Ctrl+Shift+R)
- API μλ² μ¬μμ
- Sonamu UI μ¬μμ
Entity μ μ₯ μ€ν¨
νμΈ μ¬ν:
- API μλ²κ° μ€ν μ€μΈκ°?
- νμΌ μ°κΈ° κΆνμ΄ μλκ°?
- νλλͺ
μ΄ μ ν¨νκ°? (μμ½μ΄ 체ν¬)
- μΈλν€ μ°Έμ‘°κ° μ¬λ°λ₯Έκ°?
λ€μ λ¨κ³