Sonamu UI ์ ์ํ๊ธฐ
์๋ฒ ์คํ
UI ์ ์
API ์๋ฒ๊ฐ ์คํ๋๋ฉด ์๋์ผ๋ก Sonamu UI๋ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค:Sonamu UI๋ ๋ณ๋์ ํฌํธ ์์ด API ์๋ฒ์
/sonamu-ui ๊ฒฝ๋ก์์ ์ ๊ณต๋ฉ๋๋ค.
Sonamu UI Main
์ฃผ์ ํญ ๊ตฌ์ฑ
Sonamu UI๋ 4๊ฐ์ ์ฃผ์ ํญ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:- Entities
- Migrations
- Scaffolding
- Fixture
Entity ์ ์์ ๊ด๋ฆฌ
- Entity ์์ฑ, ์์ , ์ญ์
- Props, Indexes, Subsets, Enums ์ค์
Entity ์์ฑํ๊ธฐ
1. Entity ๋ชฉ๋ก ํ์ด์ง
Entities ํญ์ ํด๋ฆญํ๋ฉด ํ๋ก์ ํธ์ ๋ชจ๋ Entity ๋ชฉ๋ก์ด ํ์๋ฉ๋๋ค.
Entity List
- Entity ID์ Title
- ํ ์ด๋ธ๋ช
- Props ๊ฐ์
- Relation ๊ฐ์
2. ์ Entity ์์ฑ
1
Create Entity ๋ฒํผ ํด๋ฆญ
์ฐ์ธก ์๋จ์ โCreate Entityโ ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
2
๊ธฐ๋ณธ ์ ๋ณด ์ ๋ ฅ
Entity ์์ฑ ํผ์์ ๋ค์ ์ ๋ณด๋ฅผ ์
๋ ฅํฉ๋๋ค:
- Entity ID: PascalCase (์:
User,BlogPost) - Table Name: snake_case (์:
users,blog_posts) - Title: ํ๊ธ ๋๋ ํ์๋ช (์: โ์ฌ์ฉ์โ, โ๋ธ๋ก๊ทธ ๊ธโ)
- Parent ID: ์ ํ ์ฌํญ - ๋ค๋ฅธ Entity๋ฅผ ์์ํ ๋ ์ฌ์ฉ
3
์ ์ฅ
โCreateโ ๋ฒํผ์ ํด๋ฆญํ๋ฉด:
{entity}.entity.jsonํ์ผ ์์ฑ- Entity ์์ธ ํ์ด์ง๋ก ์๋ ์ด๋

Create Entity Dialog
Entity ํธ์งํ๊ธฐ
Entity๋ฅผ ํด๋ฆญํ๋ฉด ์์ธ ํธ์ง ํ์ด์ง๊ฐ ์ด๋ฆฝ๋๋ค. 4๊ฐ์ ์ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:Props ์ํธ
Entity์ ์์ฑ(์ปฌ๋ผ)์ ๊ด๋ฆฌํ๋ ๋ฉ์ธ ์ํธ์ ๋๋ค.
Props Sheet
Props ์ถ๊ฐํ๊ธฐ
1
Add Property ๋ฒํผ ํด๋ฆญ
์ฐ์ธก ์๋จ์ โAdd Propertyโ ๋ฒํผ ํด๋ฆญ ๋๋ ๋จ์ถํค
Ctrl+Cmd+Shift+N ์ฌ์ฉ2
์์ฑ ์ ๋ณด ์ ๋ ฅ
๊ธฐ๋ณธ ํ๋:
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 ์ฐธ์กฐ
3
์ ์ฅ
์
๋ ฅ ์๋ฃ ํ โSaveโ ๋ฒํผ ํด๋ฆญ
Props ์์ ๋ฐ ์ญ์
- ์์
- ์ญ์
- ์์ ๋ณ๊ฒฝ
- Props ๋ชฉ๋ก์์ ์์ ํ ํ์ ๋๋ธํด๋ฆญ ๋๋
Enterํค - ๋๋ ํ ์ ํ ํ ์ฐ์ธก์ โEditโ ๋ฒํผ ํด๋ฆญ
- ํผ์์ ๊ฐ ์์ ํ ์ ์ฅ
Indexes ์ํธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
Indexes ์ํธ ํ๋ฉด
Index ์ถ๊ฐํ๊ธฐ
1
Add Index ๋ฒํผ ํด๋ฆญ
โAdd Indexโ ๋ฒํผ ํด๋ฆญ ๋๋ Indexes ์ํธ์์
Ctrl+Cmd+Shift+N2
Index ์ค์
Index ์ต์
:
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 ์๋ต์ ์ํ ํ๋ ์กฐํฉ์ ์ ์ํฉ๋๋ค.
Relations and Subsets
Subset ํค ์ถ๊ฐ
1
Add Subset ๋ฒํผ ํด๋ฆญ
โAdd Subsetโ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ subset ํค ์ถ๊ฐ
2
Subset ํค ์ ๋ ฅ
- ๋๋ฌธ์๋ก ์์ํ๋ ์งง์ ํค ๊ถ์ฅ (์:
A,P,SS) - ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํค:
A: All - ๋ชจ๋ ํ๋P: Public - ๊ณต๊ฐ API์ฉSS: Simple Short - ๊ฐ๋จํ ์ ๋ณด๋ง
ํ๋ ์ ํ
- ์ผ๋ฐ ํ๋
- Relation ํ๋
- Internal ํ๋
- ์ฒดํฌ๋ฐ์ค๋ฅผ ํด๋ฆญํ์ฌ ํ๋ ํฌํจ/์ ์ธ
- ์ฌ๋ฌ subset์์ ๋์ผ ํ๋ ์ ํ ๊ฐ๋ฅ
Enums ์น์
Enum ํ์ ์ ํค์ ๋ ์ด๋ธ์ ์ ์ํฉ๋๋ค.
Enums Section
Enum ์ถ๊ฐ
1
Add Enum ๋ฒํผ ํด๋ฆญ
โAdd Enumโ ๋ฒํผ์ ํด๋ฆญ
2
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๋ ํจ์จ์ ์ธ ์์ ์ ์ํ ๋ค์ํ ๋จ์ถํค๋ฅผ ์ ๊ณตํฉ๋๋ค.์ ์ญ ๋จ์ถํค
Props/Indexes ์ํธ
๊ฒ์ ๋ชจ๋
Entity ์ญ์ ํ๊ธฐ
1
Entity ์ ํ
์ญ์ ํ Entity์ ์์ธ ํ์ด์ง๋ก ์ด๋
2
Delete Entity ๋ฒํผ ํด๋ฆญ
์ฐ์ธก ์๋จ์ โDelete Entityโ ๋ฒํผ ํด๋ฆญ
3
ํ์ธ
ํ์ธ ๋ค์ด์ผ๋ก๊ทธ์์ Entity ID๋ฅผ ์ ํํ ์
๋ ฅํ์ฌ ์ญ์ ํ์ธ
{entity}.entity.jsonํ์ผ ์ญ์ - ๊ด๋ จ๋ Model, Types ํ์ผ์ ์๋์ผ๋ก ์ญ์ ํ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํตํด ๋ณ๋๋ก ์ญ์
ํ์ผ ๊ตฌ์กฐ
Entity๋ฅผ ์ ์ฅํ๋ฉด ๋ค์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค:ํ์ด๋ผ์ดํธ๋ ํ์ผ๋ค์ Sonamu๊ฐ ์๋์ผ๋ก ์์ฑํ๋ ํ์ผ์
๋๋ค.
์ค์๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ
Sonamu UI๋ ์ ๋ ฅ ์ฆ์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค:- Props
- Indexes
- Subsets
- Enums
- ์์ฝ์ด ์ฒดํฌ (JavaScript/TypeScript ํค์๋)
- ํ์ ๋ณ ํ์ ์ต์ ์ฒดํฌ
- ์ค๋ณต ์ด๋ฆ ์ฒดํฌ

Validation Errors
์๋ ์์ฑ ๊ธฐ๋ฅ
Sonamu UI๋ ์ปจํ ์คํธ์ ๋ง๋ ์๋ ์์ฑ์ ์ ๊ณตํฉ๋๋ค:Entity ID ์
๋ ฅ ์
Entity ID ์ ๋ ฅ ์
- ๊ธฐ์กด Entity ๋ชฉ๋ก ์ ์
- ํ์ดํ์ ๋ฐ๋ผ ํํฐ๋ง
Relation ์ค์ ์
Relation ์ค์ ์
withํ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ Entity ๋ชฉ๋ก ์๋ ์์ฑ
Type ID ์
๋ ฅ ์
Type ID ์ ๋ ฅ ์
- JSON, Virtual ํ์
์
idํ๋์์ ํ์ ์ ์
Enum ID ์
๋ ฅ ์
Enum ID ์ ๋ ฅ ์
- ์ ์๋ Enum ๋ชฉ๋ก ์ ์
- ์ Enum ์์ฑ ์ต์ ์ ๊ณต
๋ค์ ๋จ๊ณ
Sonamu UI์ ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์ตํ๋ค๋ฉด, ๋ค์ ์ฃผ์ ๋ฅผ ํ์ตํ์ธ์:Field Types
๋ชจ๋ ํ๋ ํ์
์ ์์ธ ์ต์
๊ณผ ์ฌ์ฉ๋ฒ
Relations
Entity ๊ฐ ๊ด๊ณ ์ ์ํ๋ ๋ฐฉ๋ฒ
Migrations
์์ฑ๋ ๋ง์ด๊ทธ๋ ์ด์
์คํํ๊ธฐ
Scaffolding
Model๊ณผ Types ํ์ผ ์๋ ์์ฑ