메인 μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°
Sonamu UIλ₯Ό 더 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ‹€μš©μ μΈ 팁과 λͺ¨λ²” 사둀λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

ν‚€λ³΄λ“œ 단좕킀

λΉ λ₯Έ μž‘μ—…μ„ μœ„ν•œ ν•„μˆ˜ 단좕킀:
단좕킀기λŠ₯μ„€λͺ…
⌘K / Ctrl+K검색전체 검색 λͺ¨λ‹¬ μ—΄κΈ°
Escλ‹«κΈ°μ—΄λ¦° λͺ¨λ‹¬ λ‹«κΈ°
⌘S / Ctrl+Sμ €μž₯ν˜„μž¬ νŽΈμ§‘ λ‚΄μš© μ €μž₯
Tabλ‹€μŒ ν•„λ“œνΌ μž…λ ₯ μ‹œ λ‹€μŒ ν•„λ“œλ‘œ 이동
Enter확인폼 제좜 λ˜λŠ” νŽΈμ§‘ μ™„λ£Œ
검색 ν™œμš©: ⌘K둜 검색을 μ—΄κ³  Entity 이름, ν•„λ“œλͺ… 등을 λΉ λ₯΄κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

Entity 관리 팁

1. λΆ€λͺ¨-μžμ‹ Entity ꡬ쑰화

κ΄€λ ¨λœ Entity듀은 λΆ€λͺ¨-μžμ‹ κ΄€κ³„λ‘œ κ΅¬μ‘°ν™”ν•˜μ„Έμš”:
Order (λΆ€λͺ¨)
β”œβ”€β”€ OrderItem (μžμ‹)
β”œβ”€β”€ OrderPayment (μžμ‹)
└── OrderShipment (μžμ‹)
μž₯점:
  • μ‚¬μ΄λ“œλ°”μ—μ„œ 계측 ꡬ쑰둜 ν‘œμ‹œ
  • κ΄€λ ¨ Entityλ₯Ό μ‰½κ²Œ 찾을 수 있음
  • 논리적 κ·Έλ£Ήν•‘

2. λͺ…λͺ… κ·œμΉ™ 일관성

κ΅¬λΆ„κ·œμΉ™μ˜ˆμ‹œ
Entity IDPascalCaseUser, OrderItem
ν•„λ“œλͺ…snake_casecreated_at, user_id
EnumPascalCaseUserRole, 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 μž¬μ‹œμž‘

변경사항이 λ°˜μ˜λ˜μ§€ μ•Šμ„ λ•Œ

ν•΄κ²°:
  1. λΈŒλΌμš°μ € μƒˆλ‘œκ³ μΉ¨ (F5)
  2. ν•˜λ“œ λ¦¬λ‘œλ“œ (βŒ˜β‡§R / Ctrl+Shift+R)
  3. API μ„œλ²„ μž¬μ‹œμž‘
  4. Sonamu UI μž¬μ‹œμž‘

Entity μ €μž₯ μ‹€νŒ¨

확인 사항:
  • API μ„œλ²„κ°€ μ‹€ν–‰ 쀑인가?
  • 파일 μ“°κΈ° κΆŒν•œμ΄ μžˆλŠ”κ°€?
  • ν•„λ“œλͺ…이 μœ νš¨ν•œκ°€? (μ˜ˆμ•½μ–΄ 체크)
  • μ™Έλž˜ν‚€ μ°Έμ‘°κ°€ μ˜¬λ°”λ₯Έκ°€?

λ‹€μŒ 단계