Skip to main content
Sonamu의 μŠ€μΊν΄λ”© μ‹œμŠ€ν…œμœΌλ‘œ κ΄€λ¦¬μž νŽ˜μ΄μ§€μ˜ λͺ©λ‘κ³Ό 폼 λ·°λ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€.

View Scaffolding κ°œμš”

μžλ™ 생성

λͺ©λ‘/폼 λ·° μ›Ή UI둜 생성

νƒ€μž… μ•ˆμ „

Entity 기반 컴파일 νƒ€μž„ 검증

μ»€μŠ€ν„°λ§ˆμ΄μ§•

생성 ν›„ μˆ˜μ • μ™„μ „ν•œ μ œμ–΄

일관성

ν†΅μΌλœ UI/UX 베슀트 ν”„λž™ν‹°μŠ€

View Scaffoldingμ΄λž€?

문제: 반볡적인 CRUD λ·° μž‘μ„±

전톡적인 κ°œλ°œμ—μ„œλŠ” 각 μ—”ν‹°ν‹°λ§ˆλ‹€ λΉ„μŠ·ν•œ CRUD 화면을 μˆ˜λ™μœΌλ‘œ 반볡 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. μˆ˜λ™ μž‘μ„± μ‹œ 문제점:
  1. μ‹œκ°„ λ‚­λΉ„: λͺ©λ‘, 생성, μˆ˜μ • νŽ˜μ΄μ§€λ₯Ό λͺ¨λ‘ μ†μœΌλ‘œ μž‘μ„±
  2. 일관성 λΆ€μ‘±: κ°œλ°œμžλ§ˆλ‹€ λ‹€λ₯Έ μŠ€νƒ€μΌ, λ‹€λ₯Έ ꡬ쑰
  3. μœ μ§€λ³΄μˆ˜ 어렀움: μ—”ν‹°ν‹° λ³€κ²½ μ‹œ λͺ¨λ“  λ·° μˆ˜μ • ν•„μš”
  4. μ‹€μˆ˜ κ°€λŠ₯μ„±: ν•„λ“œ λˆ„λ½, 잘λͺ»λœ νƒ€μž…, μœ νš¨μ„± 검사 λˆ„λ½
  5. λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ: ν…Œμ΄λΈ”, 폼, λ²„νŠΌ λ“± 반볡 μ½”λ“œ
μ˜ˆμ‹œ: User μ—”ν‹°ν‹° ν•˜λ‚˜μ— ν•„μš”ν•œ νŽ˜μ΄μ§€
각 νŽ˜μ΄μ§€λ§ˆλ‹€ 100~200쀄 μ΄μƒμ˜ μ½”λ“œκ°€ ν•„μš”ν•˜κ³ , 이λ₯Ό λͺ¨λ“  엔티티에 λ°˜λ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν•΄κ²°: μžλ™ μŠ€μΊν΄λ”©

SonamuλŠ” Entity μ •μ˜λ₯Ό 기반으둜 κ΄€λ¦¬μž νŽ˜μ΄μ§€ λ·°λ₯Ό μžλ™ μƒμ„±ν•©λ‹ˆλ‹€. μž₯점:
  1. ✨ μ¦‰μ‹œ 생성: μ›Ή UI둜 클릭만으둜 λ·° 생성
  2. ✨ νƒ€μž… μ•ˆμ „: Entity νƒ€μž…μ΄ μ»΄ν¬λ„ŒνŠΈμ— κ·ΈλŒ€λ‘œ 반영
  3. ✨ μΌκ΄€λœ UI: ν†΅μΌλœ λ””μžμΈ μ‹œμŠ€ν…œ
  4. ✨ 베슀트 ν”„λž™ν‹°μŠ€: κ²€μ¦λœ νŒ¨ν„΄ 적용
  5. ✨ μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯: 생성 ν›„ ν•„μš”ν•œ λΆ€λΆ„λ§Œ μˆ˜μ •
Sonamu의 μŠ€μΊν΄λ”© μ² ν•™:
β€œ80%λŠ” μžλ™μœΌλ‘œ, 20%λŠ” μ»€μŠ€ν„°λ§ˆμ΄μ§•β€
λŒ€λΆ€λΆ„μ˜ CRUD κΈ°λŠ₯은 μžλ™ μƒμ„±ν•˜κ³ , νŠΉλ³„ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직만 μΆ”κ°€λ‘œ κ΅¬ν˜„ν•©λ‹ˆλ‹€.

μŠ€μΊν΄λ”© μ‹€ν–‰

Sonamu μ›Ή UI μ‚¬μš©

SonamuλŠ” μ›Ή 기반 관리 UIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
μ›Ή UIμ—μ„œ λ·° 생성:
  1. Sonamu UI 접속
  2. β€œScaffold” 메뉴 선택
  3. Entity 선택 (예: User)
  4. β€œGenerate View List” λ²„νŠΌ 클릭 β†’ index.tsx 생성
  5. β€œGenerate View Form” λ²„νŠΌ 클릭 β†’ form.tsx 생성
CLI λͺ…λ Ήμ–΄λŠ” ν˜„μž¬ λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ·° 생성은 Sonamu μ›Ή UIλ₯Ό ν†΅ν•΄μ„œλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

μƒμ„±λ˜λŠ” 파일 ꡬ쑰

μ‹€μ œ μƒμ„±λ˜λŠ” 파일:
  • index.tsx: λͺ©λ‘ ν…Œμ΄λΈ”μ΄ 직접 ν¬ν•¨λœ νŽ˜μ΄μ§€
  • form.tsx: 생성과 μˆ˜μ •μ„ ν•˜λ‚˜μ˜ 폼으둜 톡합
주의: - λ³„λ„μ˜ μ»΄ν¬λ„ŒνŠΈ 파일(UserTable.tsx, UserForm.tsx)은 μƒμ„±λ˜μ§€ μ•ŠμŒ - 상세 νŽ˜μ΄μ§€([id].tsx)λŠ” μžλ™ μƒμ„±λ˜μ§€ μ•ŠμŒ - λͺ¨λ“  둜직이 두 개의 νŽ˜μ΄μ§€ νŒŒμΌμ— 톡합됨

μƒμ„±λœ λ·° ꡬ쑰

λͺ©λ‘ νŽ˜μ΄μ§€ (index.tsx)

λͺ©λ‘μ„ ν…Œμ΄λΈ”λ‘œ ν‘œμ‹œν•˜κ³  νŽ˜μ΄μ§€λ„€μ΄μ…˜, 검색 κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
κΈ°λŠ₯:
  • νŽ˜μ΄μ§€λ„€μ΄μ…˜
  • 검색 ν•„ν„°
  • β€œCreate New” λ²„νŠΌ
  • β€œEdit” λ²„νŠΌ (각 ν–‰)
  • ν…Œμ΄λΈ”μ΄ νŽ˜μ΄μ§€μ— 직접 포함 (별도 μ»΄ν¬λ„ŒνŠΈ μ—†μŒ)

폼 νŽ˜μ΄μ§€ (form.tsx)

생성과 μˆ˜μ •μ„ ν•˜λ‚˜μ˜ 폼으둜 ν†΅ν•©ν•©λ‹ˆλ‹€.
κΈ°λŠ₯:
  • 생성/μˆ˜μ • 톡합: URL νŒŒλΌλ―Έν„°(?id=)둜 λͺ¨λ“œ ꡬ뢄
  • μˆ˜μ • μ‹œ κΈ°μ‘΄ 데이터 μžλ™ λ‘œλ“œ
  • μœ νš¨μ„± 검사
  • μ €μž₯ 쀑 λ²„νŠΌ λΉ„ν™œμ„±ν™”
  • β€œBack to List” λ²„νŠΌ

생성 파일의 νŠΉμ§•

톡합 ꡬ쑰

Sonamu의 μŠ€μΊν΄λ”©μ€ μ΅œμ†Œν•œμ˜ 파일둜 κ΅¬μ„±λ©λ‹ˆλ‹€: 전톡적인 ꡬ쑰 (λ³΅μž‘ν•¨):
Sonamu ꡬ쑰 (간결함):
톡합 ꡬ쑰의 μž₯점:
  • 파일 수 μ΅œμ†Œν™”
  • 파일 κ°„ 이동 κ°μ†Œ
  • μœ μ§€λ³΄μˆ˜ κ°„νŽΈ
  • μ½”λ“œ 응집도 λ†’μŒ

λΌμš°νŒ… νŒ¨ν„΄

URL νŒŒλΌλ―Έν„°λ‘œ 생성/μˆ˜μ • λͺ¨λ“œλ₯Ό κ΅¬λΆ„ν•©λ‹ˆλ‹€.

μ»€μŠ€ν„°λ§ˆμ΄μ§•

생성 ν›„ μˆ˜μ •

μƒμ„±λœ νŒŒμΌμ€ μ™„μ „νžˆ μˆ˜μ • κ°€λŠ₯ν•©λ‹ˆλ‹€.

useTypeForm으둜 폼 μ—…κ·Έλ ˆμ΄λ“œ (ꢌμž₯)

μžλ™ μƒμ„±λœ 폼은 기본적으둜 useState와 직접 이벀트 ν•Έλ“€λŸ¬λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이λ₯Ό useTypeForm으둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λ©΄ 훨씬 κ°„κ²°ν•˜κ³  νƒ€μž… μ•ˆμ „ν•œ μ½”λ“œκ°€ λ©λ‹ˆλ‹€. μƒμ„±λœ μ½”λ“œ (κΈ°λ³Έ):
useTypeForm으둜 μ—…κ·Έλ ˆμ΄λ“œ:
κ°œμ„  효과:
  • βœ… μ½”λ“œλŸ‰ 50% κ°μ†Œ: useState, 이벀트 ν•Έλ“€λŸ¬ 제거
  • βœ… μžλ™ μœ νš¨μ„± 검사: SaveParams μŠ€ν‚€λ§ˆ 기반
  • βœ… νƒ€μž… μ•ˆμ „: 컴파일 νƒ€μž„ μ—λŸ¬ 감지
  • βœ… μ—λŸ¬ 처리 톡합: ν•„λ“œλ³„ μ—λŸ¬ λ©”μ‹œμ§€ μžλ™ ν‘œμ‹œ
μžλ™ μƒμ„±λœ νŒŒμΌμ„ Git에 μ»€λ°‹ν•œ ν›„ useTypeForm으둜 μ—…κ·Έλ ˆμ΄λ“œν•˜λ©΄, λ³€κ²½ 사항을 μ‰½κ²Œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

별도 μ»΄ν¬λ„ŒνŠΈλ‘œ 뢄리

ν•„μš”ν•˜λ©΄ μˆ˜λ™μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€:

상세 νŽ˜μ΄μ§€ μΆ”κ°€

μžλ™ μƒμ„±λ˜μ§€ μ•ŠλŠ” 상세 νŽ˜μ΄μ§€λŠ” μˆ˜λ™μœΌλ‘œ μΆ”κ°€:

베슀트 ν”„λž™ν‹°μŠ€

1. 생성 ν›„ μ¦‰μ‹œ Git 컀밋

μ΄λ ‡κ²Œ ν•˜λ©΄ μ»€μŠ€ν„°λ§ˆμ΄μ§• 내역을 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. 곡톡 λ‘œμ§μ€ Hook으둜 μΆ”μΆœ

3. μŠ€νƒ€μΌμ€ μ „μ—­μœΌλ‘œ 관리

λͺ¨λ“  κ΄€λ¦¬μž νŽ˜μ΄μ§€μ—μ„œ μΌκ΄€λœ μŠ€νƒ€μΌ μ‚¬μš©.

μ£Όμ˜μ‚¬ν•­

View Scaffolding μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­: 1. μ›Ή UIμ—μ„œλ§Œ 생성 κ°€λŠ₯ (CLI λͺ…λ Ήμ–΄ λΉ„ν™œμ„±ν™”λ¨) 2. index.tsx, form.tsx만 생성 (별도 μ»΄ν¬λ„ŒνŠΈ μ—†μŒ) 3. 상세 νŽ˜μ΄μ§€λŠ” μˆ˜λ™ μΆ”κ°€ ν•„μš” 4. μž¬μƒμ„±ν•˜λ©΄ μ»€μŠ€ν„°λ§ˆμ΄μ§• 손싀 (Git 컀밋 ν•„μˆ˜) 5. 생성 ν›„ ν•„μš”μ— 따라 μ»΄ν¬λ„ŒνŠΈ 뢄리 ꢌμž₯

λ‹€μŒ 단계

μ»€μŠ€ν…€ μ»΄ν¬λ„ŒνŠΈ

μ»΄ν¬λ„ŒνŠΈ μ»€μŠ€ν„°λ§ˆμ΄μ§•

ID Async Select

관계 데이터 선택

Search Input

검색 μ»΄ν¬λ„ŒνŠΈ

Service μ‚¬μš©ν•˜κΈ°

Service 톡합