Skip to main content
SonamuλŠ” Entity μ •μ˜λ₯Ό 기반으둜 μ™„μ „ν•œ νƒ€μž… μ•ˆμ „μ„±μ„ μ œκ³΅ν•˜λŠ” TypeScript νƒ€μž…μ„ μžλ™ μƒμ„±ν•©λ‹ˆλ‹€. 이 λ¬Έμ„œλŠ” Entity의 각 ν•„λ“œ νƒ€μž…μ΄ μ–΄λ–»κ²Œ TypeScript νƒ€μž…μœΌλ‘œ λ³€ν™˜λ˜λŠ”μ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

νƒ€μž… λ³€ν™˜ κ°œμš”

ν•„λ“œ νƒ€μž…

Entity Prop β†’ TypeScript Type μžλ™ λ³€ν™˜ 및 νƒ€μž… μ•ˆμ „μ„±

Nullable 지원

nullable: true β†’ T | null 선택적 null 처리

Array νƒ€μž…

type[] β†’ T[] λ°°μ—΄ νƒ€μž… μžλ™ 생성

Relation νƒ€μž…

BelongsToOne β†’ number (FK) 관계 ν•„λ“œ νƒ€μž… λ³€ν™˜

κΈ°λ³Έ νƒ€μž… λ³€ν™˜

Entity의 각 ν•„λ“œ νƒ€μž…μ΄ TypeScript νƒ€μž…μœΌλ‘œ μ–΄λ–»κ²Œ λ³€ν™˜λ˜λŠ”μ§€ λ³΄μ—¬μ€λ‹ˆλ‹€.

숫자 νƒ€μž…

bigInteger vs integer: IDλ‚˜ μΉ΄μš΄νŠΈλŠ” integer둜 μΆ©λΆ„ν•˜μ§€λ§Œ, νƒ€μž„μŠ€νƒ¬ν”„(milliseconds)λ‚˜ 맀우 큰 μˆ«μžλŠ” bigIntegerλ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

λ¬Έμžμ—΄ νƒ€μž…

length 속성은 TypeScript νƒ€μž…μ— 영ν–₯을 μ£Όμ§€ μ•Šμ§€λ§Œ, Zod validationμ—μ„œ .max(length) κ²€μ¦μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.

뢈린 νƒ€μž…

λ‚ μ§œ νƒ€μž…

JSON 직렬화: API μ‘λ‹΅μ—μ„œ DateλŠ” ISO λ¬Έμžμ—΄(string)둜 μ „μ†‘λ©λ‹ˆλ‹€. Zod의 z.date()λŠ” μžλ™μœΌλ‘œ λ¬Έμžμ—΄μ„ Date 객체둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

UUID νƒ€μž…

TypeScriptμ—λŠ” UUID μ „μš© νƒ€μž…μ΄ μ—†μœΌλ―€λ‘œ string으둜 ν‘œν˜„λ©λ‹ˆλ‹€. Zod validationμ—μ„œ .uuid()둜 ν˜•μ‹μ„ κ²€μ¦ν•©λ‹ˆλ‹€.

숫자 정밀도 νƒ€μž…

PostgreSQL의 κ³ μ •λ°€ 숫자λ₯Ό λ‹€λ£¨λŠ” 두 κ°€μ§€ νƒ€μž…μž…λ‹ˆλ‹€.

number vs numeric

number vs numeric 선택:βœ… number μ‚¬μš© μ‹œκΈ°:
  • 일반적인 수치 계산
  • μ†Œμˆ˜μ  정밀도가 μ€‘μš”ν•˜μ§€ μ•Šμ€ 경우
  • κ³Όν•™ 계산, 톡계
❌ numeric μ‚¬μš© μ‹œκΈ°:
  • 금육 계산 (돈, 가격, μž”μ•‘)
  • μ •ν™•ν•œ μ†Œμˆ˜μ μ΄ ν•„μš”ν•œ 경우
  • μ•”ν˜Έν™”ν κΈˆμ•‘

Enum νƒ€μž…

Entity의 Enum이 TypeScript Union νƒ€μž…μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
μž₯점:
  • μžλ™μ™„μ„± 지원
  • νƒ€μž… μ•ˆμ „μ„± 보μž₯
  • 잘λͺ»λœ κ°’ 컴파일 μ—λŸ¬

JSON νƒ€μž…

λ³΅μž‘ν•œ 객체 ꡬ쑰λ₯Ό JSON으둜 μ €μž₯ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
json νƒ€μž…μ€ id둜 μ§€μ •ν•œ Zod μŠ€ν‚€λ§ˆλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. 이 μŠ€ν‚€λ§ˆλŠ” {entity} .types.tsμ—μ„œ 직접 μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Virtual νƒ€μž…

λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ§€ μ•ŠλŠ” 계산 ν•„λ“œμž…λ‹ˆλ‹€.
Virtual ν•„λ“œλŠ” Model의 Enhancerμ—μ„œ κ³„μ‚°λ©λ‹ˆλ‹€:

Vector νƒ€μž…

벑터 검색 (pgvector)을 μœ„ν•œ νƒ€μž…μž…λ‹ˆλ‹€.
dimensionsλŠ” TypeScript νƒ€μž…μ— 영ν–₯을 μ£Όμ§€ μ•Šμ§€λ§Œ, PostgreSQL μŠ€ν‚€λ§ˆμ™€ Zod validationμ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

Relation νƒ€μž…

Entity κ°„ 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œμž…λ‹ˆλ‹€.

BelongsToOne (λ‹€λŒ€μΌ)

ν•„λ“œλͺ… λ³€ν™˜: user β†’ user_idEntityμ—μ„œλŠ” user둜 μ •μ˜ν•˜μ§€λ§Œ, μ‹€μ œ TypeScript νƒ€μž…μ€ user_idκ°€ λ©λ‹ˆλ‹€.

OneToOne (μΌλŒ€μΌ)

HasMany / ManyToMany

HasMany와 ManyToManyλŠ” base νƒ€μž…μ— ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Subset을 μ •μ˜ν•˜λ©΄ ν•΄λ‹Ή νƒ€μž…μ΄ Subset νƒ€μž…μ— ν¬ν•¨λ©λ‹ˆλ‹€.

Nullable 처리

nullable: trueλŠ” TypeScript Union νƒ€μž…μœΌλ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
λ°°μ—΄μ˜ nullable: string[]의 nullable: trueλŠ” λ°°μ—΄ μžμ²΄κ°€ null κ°€λŠ₯함을 μ˜λ―Έν•©λ‹ˆλ‹€.

νƒ€μž… λ³€ν™˜ 전체 λ§€ν•‘

λͺ¨λ“  Entity Prop νƒ€μž…κ³Ό TypeScript νƒ€μž…μ˜ λ§€ν•‘ν‘œμž…λ‹ˆλ‹€.

μ‹€μ „ μ˜ˆμ‹œ

μ‹€μ œ User Entity의 νƒ€μž… λ³€ν™˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

λ‹€μŒ 단계

Generated Types

μƒμ„±λ˜λŠ” νƒ€μž…λ“€μ˜ μ’…λ₯˜μ™€ μš©λ„

Zod Validation

Zod둜 λŸ°νƒ€μž„ κ²€μ¦ν•˜κΈ°

E2E Type Safety

μ—”λ“œνˆ¬μ—”λ“œ νƒ€μž… μ•ˆμ „μ„±

Field Types

Entity ν•„λ“œ νƒ€μž… 전체 레퍼런슀