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 ์๋ฒ๊ฐ ์คํ ์ค์ธ๊ฐ?
- ํ์ผ ์ฐ๊ธฐ ๊ถํ์ด ์๋๊ฐ?
- ํ๋๋ช
์ด ์ ํจํ๊ฐ? (์์ฝ์ด ์ฒดํฌ)
- ์ธ๋ํค ์ฐธ์กฐ๊ฐ ์ฌ๋ฐ๋ฅธ๊ฐ?
๋ค์ ๋จ๊ณ
Entity ๊ด๋ฆฌ
Entity ๊ด๋ฆฌ ์์ธํ ๋ณด๊ธฐ
Sonamu CLI
CLI๋ก ๊ณ ๊ธ ์์
ํ๊ธฐ