Sonamu UI ์ ์ํ๊ธฐ
์๋ฒ ์คํ
UI ์ ์
API ์๋ฒ๊ฐ ์คํ๋๋ฉด ์๋์ผ๋ก Sonamu UI๋ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค:/sonamu-ui ๊ฒฝ๋ก์์ ์ ๊ณต๋ฉ๋๋ค.๐ธ ํ์: Sonamu UI ๋ฉ์ธ ํ๋ฉด - Entities ํญ์ด ์ด๋ฆฐ ์ํ
์ฃผ์ ํญ ๊ตฌ์ฑ
Sonamu UI๋ 4๊ฐ์ ์ฃผ์ ํญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:- Entities
- Migrations
- Scaffolding
- Fixture
- Entity ์์ฑ, ์์ , ์ญ์
- Props, Indexes, Subsets, Enums ์ค์
Entity ์์ฑํ๊ธฐ
1. Entity ๋ชฉ๋ก ํ์ด์ง
Entities ํญ์ ํด๋ฆญํ๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Entity ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค.๐ธ ํ์: Entity ๋ชฉ๋ก ํ๋ฉด - ์ฌ๋ฌ Entity๊ฐ ์นด๋ ํํ๋ก ๋์ด
- Entity ID์ Title
- ํ ์ด๋ธ๋ช
- Props ๊ฐ์
- Relation ๊ฐ์
2. ์ Entity ์์ฑ
Create Entity ๋ฒํผ ํด๋ฆญ
๊ธฐ๋ณธ ์ ๋ณด ์ ๋ ฅ
- Entity ID: PascalCase (์:
User,BlogPost) - Table Name: snake_case (์:
users,blog_posts) - Title: ํ๊ธ ๋๋ ํ์๋ช (์: โ์ฌ์ฉ์โ, โ๋ธ๋ก๊ทธ ๊ธโ)
- Parent ID: ์ ํ ์ฌํญ - ๋ค๋ฅธ Entity๋ฅผ ์์ํ ๋ ์ฌ์ฉ
์ ์ฅ
{entity}.entity.jsonํ์ผ ์์ฑ- Entity ์์ธ ํ์ด์ง๋ก ์๋ ์ด๋
๐ธ ํ์: Entity ์์ฑ ๋ค์ด์ผ๋ก๊ทธ - ์ ๋ ฅ ํผ ํ๋ฉด
Entity ํธ์งํ๊ธฐ
Entity๋ฅผ ํด๋ฆญํ๋ฉด ์์ธ ํธ์ง ํ์ด์ง๊ฐ ์ด๋ฆฝ๋๋ค. 4๊ฐ์ ์ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:Props ์ํธ
Entity์ ์์ฑ(์ปฌ๋ผ)์ ๊ด๋ฆฌํ๋ ๋ฉ์ธ ์ํธ์ ๋๋ค.๐ธ ํ์: Props ์ํธ ํ๋ฉด - ์์ฑ ๋ชฉ๋ก์ด ํ ํํ๋ก ํ์
Props ์ถ๊ฐํ๊ธฐ
Add Property ๋ฒํผ ํด๋ฆญ
Ctrl+Cmd+Shift+N ์ฌ์ฉ์์ฑ ์ ๋ณด ์ ๋ ฅ
name: ์์ฑ๋ช (snake_case)type: ๋ฐ์ดํฐ ํ์ (๋๋กญ๋ค์ด์์ ์ ํ)desc: ์ค๋ช (์ ํ ์ฌํญ)nullable: NULL ํ์ฉ ์ฌ๋ถ (์ฒดํฌ๋ฐ์ค)dbDefault: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ๊ฐ
string / string[]
string / string[]
length: ๋ฌธ์์ด ๊ธธ์ด (๊ธฐ๋ณธ๊ฐ: TEXT)- ์:
length: 255โVARCHAR(255)
number / number[]
number / number[]
precision: ์ ์ฒด ์๋ฆฟ์scale: ์์์ ์๋ฆฟ์numberType:real|double precision|numeric(๊ธฐ๋ณธ๊ฐ: numeric)- ์:
precision: 10, scale: 2โNUMERIC(10, 2)
numeric / numeric[]
numeric / numeric[]
precision: ์ ์ฒด ์๋ฆฟ์scale: ์์์ ์๋ฆฟ์- ์ฃผ์: TypeScript์์
stringํ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ (์ ๋ฐ๋ ์ ์ง)
enum / enum[]
enum / enum[]
id: Enum ํ์ ID (์:UserRole)- Enum์ ๋ณ๋์ Enums ์น์ ์์ ์ ์
json
json
id: JSON ์คํค๋ง ํ์ ID- TypeScript ํ์
์
{entity}.types.ts์์ ์ ์
vector / vector[]
vector / vector[]
dimensions: ๋ฒกํฐ ์ฐจ์ (์: 1536)- pgvector ํ์ฅ ํ์
virtual
virtual
id: Virtual ํ์ IDvirtualType:code|querycode: TypeScript ์ฝ๋๋ก ๊ณ์ฐ (๊ธฐ๋ณธ๊ฐ)query: SQL ์ฟผ๋ฆฌ๋ก ๊ณ์ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ง ์๋ ๊ณ์ฐ๋ ํ๋
relation
relation
- Relation ํ์ ์ ํ ๋ฐ ์ค์
- ์์ธํ ๋ด์ฉ์ Relations ์ฐธ์กฐ
์ ์ฅ
Props ์์ ๋ฐ ์ญ์
- ์์
- ์ญ์
- ์์ ๋ณ๊ฒฝ
- Props ๋ชฉ๋ก์์ ์์ ํ ํ์ ๋๋ธํด๋ฆญ ๋๋
Enterํค - ๋๋ ํ ์ ํ ํ ์ฐ์ธก์ โEditโ ๋ฒํผ ํด๋ฆญ
- ํผ์์ ๊ฐ ์์ ํ ์ ์ฅ
Indexes ์ํธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.๐ธ ํ์: Indexes ์ํธ ํ๋ฉด
Index ์ถ๊ฐํ๊ธฐ
Add Index ๋ฒํผ ํด๋ฆญ
Ctrl+Cmd+Shift+NIndex ์ค์
type: ์ธ๋ฑ์ค ํ์index: ์ผ๋ฐ ์ธ๋ฑ์คunique: ์ ๋ํฌ ์ธ๋ฑ์ค (์ค๋ณต ๋ฐฉ์ง)hnsw: Vector HNSW ์ธ๋ฑ์คivfflat: Vector IVFFlat ์ธ๋ฑ์ค
name: ์ธ๋ฑ์ค๋ช (์๋ ์์ฑ ๊ฐ๋ฅ)columns: ์ธ๋ฑ์ค์ ํฌํจํ ์ปฌ๋ผ ์ ํ- ๋ค์ค ์ปฌ๋ผ ์ ํ ๊ฐ๋ฅ
- ์ปฌ๋ผ ์์ ์ค์ (๋ณตํฉ ์ธ๋ฑ์ค)
using: ์ธ๋ฑ์ค ๋ฐฉ๋ฒ (์ ํ ์ฌํญ)btree(๊ธฐ๋ณธ๊ฐ)hashgingist
vectorOps: ๊ฑฐ๋ฆฌ ์ฐ์ฐ์vector_cosine_ops: ์ฝ์ฌ์ธ ๊ฑฐ๋ฆฌ (๊ถ์ฅ)vector_ip_ops: ๋ด์ ๊ฑฐ๋ฆฌvector_l2_ops: ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ
m: HNSW ๊ทธ๋ํ ์ฐ๊ฒฐ ์ (๊ธฐ๋ณธ๊ฐ: 16)efConstruction: HNSW ๊ตฌ์ฑ ํ์ง (๊ธฐ๋ณธ๊ฐ: 64)lists: IVFFlat ํด๋ฌ์คํฐ ์ (๊ธฐ๋ณธ๊ฐ: 100)
Subsets ์ํธ
API ์๋ต์ ์ํ ํ๋ ์กฐํฉ์ ์ ์ํฉ๋๋ค.๐ธ ํ์: Subsets ์ํธ ํ๋ฉด - ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํ๋ ์ ํ
Subset ํค ์ถ๊ฐ
Add Subset ๋ฒํผ ํด๋ฆญ
Subset ํค ์ ๋ ฅ
- ๋๋ฌธ์๋ก ์์ํ๋ ์งง์ ํค ๊ถ์ฅ (์:
A,P,SS) - ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํค:
A: All - ๋ชจ๋ ํ๋P: Public - ๊ณต๊ฐ API์ฉSS: Simple Short - ๊ฐ๋จํ ์ ๋ณด๋ง
ํ๋ ์ ํ
- ์ผ๋ฐ ํ๋
- Relation ํ๋
- Internal ํ๋
- ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ์ฌ ํ๋ ํฌํจ/์ ์ธ
- ์ฌ๋ฌ subset์์ ๋์ผ ํ๋ ์ ํ ๊ฐ๋ฅ
Enums ์น์
Enum ํ์ ์ ํค์ ๋ ์ด๋ธ์ ์ ์ํฉ๋๋ค.๐ธ ํ์: Enums ์น์ ํ๋ฉด - ์ฌ๋ฌ Enum์ด ํญ์ผ๋ก ๊ตฌ๋ถ
Enum ์ถ๊ฐ
Add Enum ๋ฒํผ ํด๋ฆญ
Enum ID ์ ๋ ฅ
- PascalCase๋ก ์
๋ ฅ (์:
UserRole,PostStatus) - Entity ID์ ์ฐ๊ฒฐํ๋ ค๋ฉด
{EntityId}ํจํด ์ฌ์ฉ- ์:
$ModelRoleโUserRole(์๋ ๋ณํ)
- ์:
Enum ๊ฐ ์ถ๊ฐ
๊ฐ Enum์ ๋ณ๋์ ํญ์ผ๋ก ํ์๋๋ฉฐ, ํค-๋ ์ด๋ธ ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.- โAdd Rowโ ๋ฒํผ ํด๋ฆญ
- ๋๋ Enum ํญ์์
Ctrl+Cmd+Shift+N - Key์ Label ์
๋ ฅ
- Key: ์๋ฌธ ์๋ฌธ์, ์ซ์, ์ธ๋์ค์ฝ์ด๋ง ํ์ฉ
- Label: ํ๊ธ ๋๋ ํ์์ฉ ํ ์คํธ
ํค๋ณด๋ ๋จ์ถํค
Sonamu UI๋ ํจ์จ์ ์ธ ์์ ์ ์ํ ๋ค์ํ ๋จ์ถํค๋ฅผ ์ ๊ณตํฉ๋๋ค.์ ์ญ ๋จ์ถํค
| ๋จ์ถํค | ๊ธฐ๋ฅ |
|---|---|
Cmd+S | ํ์ฌ Entity ์ ์ฅ |
Cmd+K | ๊ฒ์ ๋ชจ๋ ์ง์ |
Tab | ๋ค์ ์ํธ๋ก ์ด๋ |
Shift+Tab | ์ด์ ์ํธ๋ก ์ด๋ |
Esc | ๋ค์ด์ผ๋ก๊ทธ ๋ซ๊ธฐ / ์ ํ ํด์ |
Props/Indexes ์ํธ
| ๋จ์ถํค | ๊ธฐ๋ฅ |
|---|---|
Ctrl+Cmd+Shift+N | ์ ํญ๋ชฉ ์ถ๊ฐ |
Enter | ์ ํํ ํญ๋ชฉ ์์ |
Cmd+Backspace | ์ ํํ ํญ๋ชฉ ์ญ์ |
โ โ | ํญ๋ชฉ ์ ํ ์ด๋ |
Cmd+โ Cmd+โ | ํญ๋ชฉ ์์ ๋ณ๊ฒฝ |
๊ฒ์ ๋ชจ๋
| ๋จ์ถํค | ๊ธฐ๋ฅ |
|---|---|
Cmd+K | ๊ฒ์ ์์ |
| ํ์ดํ | ์ผ์นํ๋ ํญ๋ชฉ์ผ๋ก ์๋ ์ด๋ |
Enter | ๊ฒ์ ์๋ฃ |
Esc | ๊ฒ์ ์ทจ์ |
Entity ์ญ์ ํ๊ธฐ
Entity ์ ํ
Delete Entity ๋ฒํผ ํด๋ฆญ
ํ์ธ
{entity}.entity.jsonํ์ผ ์ญ์ - ๊ด๋ จ๋ Model, Types ํ์ผ์ ์๋์ผ๋ก ์ญ์ ํ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํตํด ๋ณ๋๋ก ์ญ์
ํ์ผ ๊ตฌ์กฐ
Entity๋ฅผ ์ ์ฅํ๋ฉด ๋ค์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค:์ค์๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ
Sonamu UI๋ ์ ๋ ฅ ์ฆ์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค:- Props
- Indexes
- Subsets
- Enums
- ์์ฝ์ด ์ฒดํฌ (JavaScript/TypeScript ํค์๋)
- ํ์ ๋ณ ํ์ ์ต์ ์ฒดํฌ
- ์ค๋ณต ์ด๋ฆ ์ฒดํฌ
๐ธ ํ์: ์ ํจ์ฑ ๊ฒ์ฌ ์ค๋ฅ ํ์ ์์
์๋ ์์ฑ ๊ธฐ๋ฅ
Sonamu UI๋ ์ปจํ ์คํธ์ ๋ง๋ ์๋ ์์ฑ์ ์ ๊ณตํฉ๋๋ค:Entity ID ์
๋ ฅ ์
Entity ID ์ ๋ ฅ ์
- ๊ธฐ์กด Entity ๋ชฉ๋ก ์ ์
- ํ์ดํ์ ๋ฐ๋ผ ํํฐ๋ง
Relation ์ค์ ์
Relation ์ค์ ์
withํ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ Entity ๋ชฉ๋ก ์๋ ์์ฑ
Type ID ์
๋ ฅ ์
Type ID ์ ๋ ฅ ์
- JSON, Virtual ํ์
์
idํ๋์์ ํ์ ์ ์
Enum ID ์
๋ ฅ ์
Enum ID ์ ๋ ฅ ์
- ์ ์๋ Enum ๋ชฉ๋ก ์ ์
- ์ Enum ์์ฑ ์ต์ ์ ๊ณต