Skip to main content
Sonamu๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์›ํ•˜๋ฉฐ, ๊ฐ ํƒ€์ž…์€ PostgreSQL, TypeScript, JSON์—์„œ ์ ์ ˆํ•˜๊ฒŒ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

๊ณตํ†ต ์˜ต์…˜

๋ชจ๋“  ํ•„๋“œ ํƒ€์ž…์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ๋˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

Generated Column

๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์ปฌ๋Ÿผ์ž…๋‹ˆ๋‹ค.
์˜ต์…˜:
  • type: STORED | VIRTUAL
    • STORED: ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋จ (์ธ๋ฑ์Šค ์ƒ์„ฑ ๊ฐ€๋Šฅ)
    • VIRTUAL: ์กฐํšŒ ์‹œ์—๋งŒ ๊ณ„์‚ฐ๋จ (๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ)
  • expression: SQL ํ‘œํ˜„์‹
  • VIRTUAL ํƒ€์ž…์€ ๋ฐฐ์—ด ํƒ€์ž…, json, vector์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค - generated์™€ dbDefault๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์ˆซ์ž ํƒ€์ž…

integer / integer[]

32๋น„ํŠธ ์ •์ˆ˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: integer
  • TypeScript: number
  • JSON: number
๋ฒ”์œ„: -2,147,483,648 ~ 2,147,483,647
์‚ฌ์šฉ ์˜ˆ์‹œ: ID, ๊ฐœ์ˆ˜, ๋‚˜์ด, ์ˆœ์„œ, ๋…„๋„

bigInteger / bigInteger[]

64๋น„ํŠธ ์ •์ˆ˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: bigint
  • TypeScript: bigint
  • JSON: bigint (๋ฌธ์ž์—ด๋กœ ์ง๋ ฌํ™”)
๋ฒ”์œ„: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
JavaScript์˜ Number.MAX_SAFE_INTEGER (2^53 - 1)๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์€ bigint๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ์ •ํ™•๋„๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

number / number[]

๋ถ€๋™์†Œ์ˆ˜์  ๋˜๋Š” ๊ณ ์ •์†Œ์ˆ˜์  ์ˆซ์ž ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: numeric(10, 2) (๊ธฐ๋ณธ๊ฐ’)
  • TypeScript: number
  • JSON: number
์ถ”๊ฐ€ ์˜ต์…˜:
  • precision: ์ „์ฒด ์ž๋ฆฟ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: ์—†์Œ = ๋ฌด์ œํ•œ)
  • scale: ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 0)
  • numberType: numeric | real | double precision (๊ธฐ๋ณธ๊ฐ’: numeric)
numberType ์„ ํƒ ๊ฐ€์ด๋“œ:
๊ธˆ์•ก ์ฒ˜๋ฆฌ: precision: 10, scale: 2๋กœ ์„ค์ •ํ•˜๋ฉด ์ตœ๋Œ€ 99,999,999.99๊นŒ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ

numeric / numeric[]

๊ณ ์ •๋ฐ€๋„ ์ˆซ์ž ํƒ€์ž…์ž…๋‹ˆ๋‹ค. TypeScript์—์„œ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: numeric(20, 10)
  • TypeScript: string โš ๏ธ
  • JSON: string
์ถ”๊ฐ€ ์˜ต์…˜:
  • precision: ์ „์ฒด ์ž๋ฆฟ์ˆ˜
  • scale: ์†Œ์ˆ˜์  ์ž๋ฆฟ์ˆ˜
number vs numeric ์ฐจ์ด์ :
  • number: TypeScript์—์„œ number ํƒ€์ž… (์ •๋ฐ€๋„ ์†์‹ค ๊ฐ€๋Šฅ)
  • numeric: TypeScript์—์„œ string ํƒ€์ž… (์ •๋ฐ€๋„ ์œ ์ง€)
ํฐ ์ˆซ์ž๋‚˜ ๋งค์šฐ ์ •ํ™•ํ•œ ์†Œ์ˆ˜์  ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ numeric์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ฌธ์ž์—ด ํƒ€์ž…

string / string[]

๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž์—ด ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: varchar(255) (length ์ง€์ • ์‹œ) ๋˜๋Š” text
  • TypeScript: string
  • JSON: string
์ถ”๊ฐ€ ์˜ต์…˜:
  • length: ์ตœ๋Œ€ ๊ธธ์ด (์ƒ๋žต ์‹œ text ํƒ€์ž… ์‚ฌ์šฉ)
  • zodFormat: Zod 4 String Format validation (์•„๋ž˜ ์ฐธ์กฐ)

zodFormat ์˜ต์…˜

zodFormat ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด BaseSchema ์ƒ์„ฑ ์‹œ Zod์˜ string format validation์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์˜ˆ์‹œ:
์ง€์› ํฌ๋งท:
length ์„ค์ • ๊ฐ€์ด๋“œ: - ์งง์€ ํ…์ŠคํŠธ (์ด๋ฆ„, ์ด๋ฉ”์ผ): 255 - ๊ธด ํ…์ŠคํŠธ (์„ค๋ช…, ๋‚ด์šฉ): ์ƒ๋žต (text ํƒ€์ž…) - ๊ณ ์ • ๊ธธ์ด (์šฐํŽธ๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ): ์ •ํ™•ํ•œ ๊ธธ์ด ์ง€์ •
zodFormat๊ณผ uuid ํƒ€์ž…์˜ ์ฐจ์ด: - type: "uuid": PostgreSQL์˜ uuid ์ปฌ๋Ÿผ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉฐ, UUID ์ „์šฉ ์ธ๋ฑ์Šค ๋ฐ ํ•จ์ˆ˜ ํ™œ์šฉ ๊ฐ€๋Šฅ - type: "string" + zodFormat: "uuid": PostgreSQL์˜ text/varchar ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ API ๋ ˆ๋ฒจ์—์„œ๋งŒ UUID ํ˜•์‹ ๊ฒ€์ฆ

enum / enum[]

์—ด๊ฑฐํ˜• ํƒ€์ž…์ž…๋‹ˆ๋‹ค. Entity์˜ enums์— ์ •์˜๋œ ๊ฐ’๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: text
  • TypeScript: "admin" | "normal" (Enum ํ‚ค์˜ Union)
  • JSON: string
์ถ”๊ฐ€ ์˜ต์…˜:
  • id: Enum ํƒ€์ž… ID (Entity์˜ enums์— ์ •์˜ ํ•„์š”)
  • length: ๋ฌธ์ž์—ด ์ตœ๋Œ€ ๊ธธ์ด (์„ ํƒ ์‚ฌํ•ญ)
Enum ์ •์˜ ์˜ˆ์‹œ:
๋” ์•Œ์•„๋ณด๊ธฐ - Enums - Enum ์ƒ์„ธ ๊ฐ€์ด๋“œ

๋…ผ๋ฆฌ ํƒ€์ž…

boolean / boolean[]

์ฐธ/๊ฑฐ์ง“ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: boolean
  • TypeScript: boolean
  • JSON: boolean
๊ธฐ๋ณธ๊ฐ’ ์„ค์ •: dbDefault: "true" ๋˜๋Š” dbDefault: "false"

๋‚ ์งœ/์‹œ๊ฐ„ ํƒ€์ž…

date / date[]

๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: timestamptz (ํƒ€์ž„์กด ํฌํ•จ)
  • TypeScript: Date
  • JSON: string (ISO 8601 ํ˜•์‹)
์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’: - CURRENT_TIMESTAMP: ํ˜„์žฌ ์‹œ๊ฐ - CURRENT_DATE: ํ˜„์žฌ ๋‚ ์งœ (์‹œ๊ฐ„ 00:00:00)

UUID ํƒ€์ž…

uuid / uuid[]

๋ฒ”์šฉ ๊ณ ์œ  ์‹๋ณ„์ž(UUID) ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: uuid
  • TypeScript: string
  • JSON: string
UUID ์ƒ์„ฑ: PostgreSQL์˜ gen_random_uuid() ํ•จ์ˆ˜๋ฅผ dbDefault๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…

json

JSON ํ˜•์‹์˜ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: json
  • TypeScript: ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… (ProductMetadata)
  • JSON: any
์ถ”๊ฐ€ ์˜ต์…˜:
  • id: TypeScript ํƒ€์ž… ID (.types.ts์—์„œ ์ •์˜)
ํƒ€์ž… ์ •์˜ ์˜ˆ์‹œ:
JSON ํƒ€์ž…์€ ์ธ๋ฑ์‹ฑ์ด ์–ด๋ ต๊ณ  ์„ฑ๋Šฅ์ด ๋‚ฎ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฃผ ๊ฒ€์ƒ‰๋˜๋Š” ํ•„๋“œ๋Š” ๋ณ„๋„ ์ปฌ๋Ÿผ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

virtual

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ ํ•„๋“œ์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: ์ €์žฅ๋˜์ง€ ์•Š์Œ
  • TypeScript: ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… (๋˜๋Š” string, number ๋“ฑ)
  • JSON: ํฌํ•จ๋จ (๊ณ„์‚ฐ ํ›„)
์ถ”๊ฐ€ ์˜ต์…˜:
  • id: TypeScript ํƒ€์ž… ID
  • virtualType: code | query (๊ธฐ๋ณธ๊ฐ’: code)
    • code: TypeScript ์ฝ”๋“œ๋กœ ๊ณ„์‚ฐ
    • query: SQL appendSelect๋กœ ๊ณ„์‚ฐ
virtualType ๋น„๊ต:
Model์—์„œ TypeScript ์ฝ”๋“œ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
์žฅ์ : ๋ณต์žกํ•œ ๋กœ์ง ๊ตฌํ˜„ ๊ฐ€๋Šฅ, ์™ธ๋ถ€ API ํ˜ธ์ถœ ๊ฐ€๋Šฅ ๋‹จ์ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ๋ฒจ ํ•„ํ„ฐ๋ง/์ •๋ ฌ ๋ถˆ๊ฐ€
virtualType ์„ ํƒ ๊ฐ€์ด๋“œ: - ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์กฐํ•ฉ, ์ˆ˜์‹ ๊ณ„์‚ฐ โ†’ query - ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ์™ธ๋ถ€ API ํ˜ธ์ถœ โ†’ code

Vector ํƒ€์ž…

vector / vector[]

๋ฒกํ„ฐ ์ž„๋ฒ ๋”ฉ์„ ์ €์žฅํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค. pgvector ํ™•์žฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: vector(1536) (pgvector ํ™•์žฅ)
  • TypeScript: number[]
  • JSON: number[]
์ถ”๊ฐ€ ์˜ต์…˜:
  • dimensions: ๋ฒกํ„ฐ ์ฐจ์› (ํ•„์ˆ˜, ์˜ˆ: 1536)
Vector ๊ฒ€์ƒ‰ ์˜ˆ์‹œ:
Vector ์ธ๋ฑ์Šค:
๋” ์•Œ์•„๋ณด๊ธฐ - Vector Search - Vector ๊ฒ€์ƒ‰ ์ƒ์„ธ ๊ฐ€์ด๋“œ - pgvector - PostgreSQL vector ํ™•์žฅ

tsvector

PostgreSQL ์ „๋ฌธ ๊ฒ€์ƒ‰(Full-Text Search)์„ ์œ„ํ•œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
๋งคํ•‘:
  • PostgreSQL: tsvector
  • TypeScript: string
  • JSON: string
์ „๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค:
์ „๋ฌธ ๊ฒ€์ƒ‰: ์ž์—ฐ์–ด ํ…์ŠคํŠธ์˜ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์— ์ตœ์ ํ™”๋œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. ํ˜•ํƒœ์†Œ ๋ถ„์„, ์–ด๊ฐ„ ์ถ”์ถœ ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Relation ํƒ€์ž…

๋‹ค๋ฅธ Entity์™€์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ํƒ€์ž…์ž…๋‹ˆ๋‹ค.
Relation ํƒ€์ž…:
  • BelongsToOne: N:1 ๊ด€๊ณ„
  • OneToOne: 1:1 ๊ด€๊ณ„
  • HasMany: 1:N ๊ด€๊ณ„
  • ManyToMany: N:M ๊ด€๊ณ„
๋” ์•Œ์•„๋ณด๊ธฐ - Relations - Relation ์ƒ์„ธ ๊ฐ€์ด๋“œ

ํƒ€์ž… ์„ ํƒ ๊ฐ€์ด๋“œ

์ˆซ์ž ์ €์žฅ

๋ฌธ์ž์—ด ์ €์žฅ

๋‚ ์งœ/์‹œ๊ฐ„ ์ €์žฅ

๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ

๋‹ค์Œ ๋‹จ๊ณ„

Relations

Entity ๊ฐ„ ๊ด€๊ณ„ ์ •์˜ํ•˜๊ธฐ

Enums

Enum ํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐ

Indexes

์ธ๋ฑ์Šค๋กœ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ–ฅ์ƒํ•˜๊ธฐ

Vector Search

Vector ๊ฒ€์ƒ‰ ์„ค์ •ํ•˜๊ธฐ