Skip to main content
pnpm scaffold λͺ…λ Ήμ–΄λŠ” Entity μ •μ˜λ₯Ό 기반으둜 λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œλ₯Ό μžλ™ μƒμ„±ν•©λ‹ˆλ‹€. Model ν΄λž˜μŠ€μ™€ ν…ŒμŠ€νŠΈ νŒŒμΌμ„ λͺ‡ 초 λ§Œμ— μƒμ„±ν•˜μ—¬ 개발 μ‹œκ°„μ„ 크게 λ‹¨μΆ•ν•©λ‹ˆλ‹€.

κΈ°λ³Έ κ°œλ…

ScaffoldλŠ” Entityλ₯Ό μ½”λ“œλ‘œ λ³€ν™˜ν•˜λŠ” μžλ™ν™” λ„κ΅¬μž…λ‹ˆλ‹€:
  • Entity 기반: Entity μ •μ˜μ—μ„œ νƒ€μž…κ³Ό ꡬ쑰 νŒŒμ•…
  • νƒ€μž… μ•ˆμ „: TypeScript νƒ€μž…μ΄ μžλ™μœΌλ‘œ 생성됨
  • 일관성: λͺ¨λ“  μ½”λ“œκ°€ 같은 νŒ¨ν„΄μ„ 따름
  • μˆ˜μ • κ°€λŠ₯: 생성 ν›„ 자유둭게 μ»€μŠ€ν„°λ§ˆμ΄μ§•

λͺ…λ Ήμ–΄

model - Model 클래슀 생성

Entityλ₯Ό μœ„ν•œ Model 클래슀λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
λŒ€ν™”ν˜• ν”„λ‘¬ν”„νŠΈκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€:
μƒμ„±λ˜λŠ” 파일: μƒμ„±λœ μ½”λ“œ:
src/application/user/user.model.ts
μ‹€μ œ μƒμ„±λ¬Όμ—λŠ” findById/findOne/findMany/save/del의 본문이 λͺ¨λ‘ μ±„μ›Œμ Έ μžˆμŠ΅λ‹ˆλ‹€. μœ„ μ˜ˆμ œλŠ” 지면상 본문을 μƒλž΅ν•œ κ²ƒμž…λ‹ˆλ‹€. PK νƒ€μž…μ΄ λ¬Έμžμ—΄μΈ Entity라면 id νƒ€μž…μ€ string으둜 μƒμ„±λ©λ‹ˆλ‹€.

model_test - ν…ŒμŠ€νŠΈ 파일 생성

Model을 μœ„ν•œ ν…ŒμŠ€νŠΈ νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.
μƒμ„±λ˜λŠ” 파일: μƒμ„±λœ μ½”λ“œ:
src/application/user/user.model.test.ts
μƒμ„±λœ ν…ŒμŠ€νŠΈλŠ” describe.skip으둜 μ‹œμž‘ν•©λ‹ˆλ‹€. μ‹€μ œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œ λ’€ .skip을 μ œκ±°ν•΄μ•Ό μ‹€ν–‰λ©λ‹ˆλ‹€.

View μŠ€μΊν΄λ”©

Admin ν™”λ©΄μ˜ λͺ©λ‘/폼 μ»΄ν¬λ„ŒνŠΈλ„ CLI둜 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.
μƒμ„±λ˜λŠ” 파일:
λ™μΌν•œ κΈ°λŠ₯을 Sonamu UI의 Scaffolding νƒ­μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒμ„±λœ μ½”λ“œ ꡬ쑰

Model 클래슀

μƒμ„±λœ Model ν΄λž˜μŠ€λŠ” λ‹€μŒ ꡬ쑰λ₯Ό κ°€μ§‘λ‹ˆλ‹€:
μžλ™ μƒμ„±λ˜λŠ” κΈ°λŠ₯:
  • βœ… TypeScript νƒ€μž…
  • βœ… Subset/Loader 쿼리 μ—°κ²°
  • βœ… BaseModelClass 상속
  • βœ… κΈ°λ³Έ CRUD λ©”μ„œλ“œ(findById/findOne/findMany/save/del)
직접 μΆ”κ°€ν•΄μ•Ό ν•˜λŠ” 것:
  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 λ©”μ„œλ“œ
  • λ³΅μž‘ν•œ 쿼리
  • 데이터 검증
  • 관계 λ‘œλ”©

ν…ŒμŠ€νŠΈ 파일

μƒμ„±λœ ν…ŒμŠ€νŠΈ νŒŒμΌμ€ κΈ°λ³Έ ν…ŒμŠ€νŠΈλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€:
ν™•μž₯ κ°€λŠ₯:
  • λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 ν…ŒμŠ€νŠΈ μΆ”κ°€
  • Edge case ν…ŒμŠ€νŠΈ
  • μ„±λŠ₯ ν…ŒμŠ€νŠΈ
  • 톡합 ν…ŒμŠ€νŠΈ

개발 μ›Œν¬ν”Œλ‘œμš°

1. Entity μ •μ˜

src/application/product/product.entity.json

2. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

3. Model 생성

4. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μΆ”κ°€

src/application/product/product.model.ts

5. ν…ŒμŠ€νŠΈ 생성

6. ν…ŒμŠ€νŠΈ μž‘μ„±

src/application/product/product.model.test.ts

7. API μΆ”κ°€

src/application/product/product.model.ts

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

Model λ©”μ„œλ“œ μΆ”κ°€

μƒμ„±λœ Model에 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μΆ”κ°€ν•©λ‹ˆλ‹€:

ν…ŒμŠ€νŠΈ ν™•μž₯

더 λ§Žμ€ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€:

μ—¬λŸ¬ Entity 일괄 생성

슀크립트 ν™œμš©

ν…ŒμŠ€νŠΈ 일괄 생성

μ‹€μ „ 팁

1. Entity λ¨Όμ € μ™„μ„±ν•˜κΈ°

2. 점진적 ν™•μž₯

3. μ»¨λ²€μ…˜ μ€€μˆ˜

4. Git 관리

문제 ν•΄κ²°

Model μž¬μƒμ„±

문제: Model을 λ‹€μ‹œ μƒμ„±ν•˜κ³  μ‹ΆμŒ ν•΄κ²°:

Entity λ³€κ²½ ν›„ 동기화

문제: Entity λ³€κ²½ ν›„ Model μ—…λ°μ΄νŠΈ ν•΄κ²°:

λ‹€μŒ 단계

Model

Model 클래슀 μžμ„Ένžˆ μ•Œμ•„λ³΄κΈ°

Testing

ν…ŒμŠ€νŠΈ μž‘μ„±ν•˜κΈ°