๊ณตํต ์ต์
๋ชจ๋ ํ๋ ํ์ ์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ์ต์ ์ ๋๋ค.| ์ต์ | ํ์ | ์ค๋ช | ๊ธฐ๋ณธ๊ฐ |
|---|---|---|---|
name | string | ํ๋๋ช (snake_case) | ํ์ |
type | string | ๋ฐ์ดํฐ ํ์ | ํ์ |
desc | string | ํ๋ ์ค๋ช | - |
nullable | boolean | NULL ํ์ฉ ์ฌ๋ถ | false |
toFilter | boolean | ๊ฒ์ ํํฐ๋ง ๊ฐ๋ฅ ์ฌ๋ถ | false |
dbDefault | string | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ๊ฐ | - |
generated | GeneratedColumn | ๊ณ์ฐ ์ปฌ๋ผ ์ค์ | - |
Generated Column
๊ณ์ฐ๋ ๊ฐ์ ์๋์ผ๋ก ์์ฑํ๋ ์ปฌ๋ผ์ ๋๋ค.type:STORED|VIRTUALSTORED: ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ๋จ (์ธ๋ฑ์ค ์์ฑ ๊ฐ๋ฅ)VIRTUAL: ์กฐํ ์์๋ง ๊ณ์ฐ๋จ (๋ฉ๋ชจ๋ฆฌ ์ ์ฝ)
expression: SQL ํํ์
์ซ์ ํ์
integer / integer[]
32๋นํธ ์ ์ ํ์ ์ ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
integer - TypeScript:
number - JSON:
number
bigInteger / bigInteger[]
64๋นํธ ์ ์ ํ์ ์ ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
bigint - TypeScript:
bigint - JSON:
bigint(๋ฌธ์์ด๋ก ์ง๋ ฌํ)
number / number[]
๋ถ๋์์์ ๋๋ ๊ณ ์ ์์์ ์ซ์ ํ์ ์ ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
numeric(10, 2)(๊ธฐ๋ณธ๊ฐ) - TypeScript:
number - JSON:
number
precision: ์ ์ฒด ์๋ฆฟ์ (๊ธฐ๋ณธ๊ฐ: ์์ = ๋ฌด์ ํ)scale: ์์์ ์๋ฆฟ์ (๊ธฐ๋ณธ๊ฐ: 0)numberType:numeric|real|double precision(๊ธฐ๋ณธ๊ฐ:numeric)
| ํ์ | ์ ๋ฐ๋ | ๋ฉ๋ชจ๋ฆฌ | ์ฌ์ฉ ์์ |
|---|---|---|---|
numeric | ์ ํํจ (๊ถ์ฅ) | ๋ง์ | ๊ธ์ก, ํตํ |
real | ๊ทผ์ฌ๊ฐ (6์๋ฆฌ) | 4 bytes | ๊ณผํ์ ๋ฐ์ดํฐ |
double precision | ๊ทผ์ฌ๊ฐ (15์๋ฆฌ) | 8 bytes | ์ขํ, ์ธก์ ๊ฐ |
numeric / numeric[]
๊ณ ์ ๋ฐ๋ ์ซ์ ํ์ ์ ๋๋ค. TypeScript์์ ๋ฌธ์์ด๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
numeric(20, 10) - TypeScript:
stringโ ๏ธ - JSON:
string
precision: ์ ์ฒด ์๋ฆฟ์scale: ์์์ ์๋ฆฟ์
๋ฌธ์์ด ํ์
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์ด ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ฌ์ฉ ์์:
| ์นดํ ๊ณ ๋ฆฌ | ํฌ๋งท | ์ค๋ช |
|---|---|---|
| ๊ธฐ๋ณธ | email | ์ด๋ฉ์ผ ์ฃผ์ ํ์ |
uuid | UUID ํ์ | |
url | URL ํ์ | |
httpUrl | HTTP/HTTPS URL ํ์ | |
hostname | ํธ์คํธ๋ช ํ์ | |
emoji | ์ด๋ชจ์ง ํ์ | |
jwt | JWT ํ ํฐ ํ์ | |
| ์ธ์ฝ๋ฉ | base64 | Base64 ์ธ์ฝ๋ฉ |
base64url | URL-safe Base64 ์ธ์ฝ๋ฉ | |
hex | 16์ง์ ๋ฌธ์์ด | |
| ID | nanoid | NanoID ํ์ |
cuid | CUID ํ์ | |
cuid2 | CUID2 ํ์ | |
ulid | ULID ํ์ | |
| ๋คํธ์ํฌ | ipv4 | IPv4 ์ฃผ์ |
ipv6 | IPv6 ์ฃผ์ | |
mac | MAC ์ฃผ์ | |
cidrv4 | IPv4 CIDR ํ๊ธฐ๋ฒ | |
cidrv6 | IPv6 CIDR ํ๊ธฐ๋ฒ | |
| ํด์ | hashMd5 | MD5 ํด์ |
hashSha1 | SHA-1 ํด์ | |
hashSha256 | SHA-256 ํด์ | |
hashSha384 | SHA-384 ํด์ | |
hashSha512 | SHA-512 ํด์ | |
| ISO | isoDate | ISO 8601 ๋ ์ง (YYYY-MM-DD) |
isoTime | ISO 8601 ์๊ฐ (HH:MM:SS) | |
isoDatetime | ISO 8601 ๋ ์ง์๊ฐ | |
isoDuration | ISO 8601 ๊ธฐ๊ฐ |
enum / enum[]
์ด๊ฑฐํ ํ์ ์ ๋๋ค. Entity์enums์ ์ ์๋ ๊ฐ๋ง ํ์ฉ๋ฉ๋๋ค.
- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
text - TypeScript:
"admin" | "normal"(Enum ํค์ Union) - JSON:
string
id: Enum ํ์ ID (Entity์enums์ ์ ์ ํ์)length: ๋ฌธ์์ด ์ต๋ ๊ธธ์ด (์ ํ ์ฌํญ)
๋ ์์๋ณด๊ธฐ - Enums - Enum ์์ธ ๊ฐ์ด๋
๋ ผ๋ฆฌ ํ์
boolean / boolean[]
์ฐธ/๊ฑฐ์ง ๊ฐ์ ์ ์ฅํ๋ ํ์ ์ ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
boolean - TypeScript:
boolean - JSON:
boolean
๋ ์ง/์๊ฐ ํ์
date / date[]
๋ ์ง์ ์๊ฐ์ ์ ์ฅํ๋ ํ์ ์ ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
timestamptz(ํ์์กด ํฌํจ) - TypeScript:
Date - JSON:
string(ISO 8601 ํ์)
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์์ ์ ์)
virtual
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ง ์๋ ๊ฐ์ ํ๋์ ๋๋ค.- PostgreSQL: ์ ์ฅ๋์ง ์์
- TypeScript: ์ฌ์ฉ์ ์ ์ ํ์
(๋๋
string,number๋ฑ) - JSON: ํฌํจ๋จ (๊ณ์ฐ ํ)
id: TypeScript ํ์ IDvirtualType:code|query(๊ธฐ๋ณธ๊ฐ:code)code: TypeScript ์ฝ๋๋ก ๊ณ์ฐquery: SQL appendSelect๋ก ๊ณ์ฐ
- code
- query
Model์์ TypeScript ์ฝ๋๋ก ๊ณ์ฐํฉ๋๋ค.์ฅ์ : ๋ณต์กํ ๋ก์ง ๊ตฌํ ๊ฐ๋ฅ, ์ธ๋ถ API ํธ์ถ ๊ฐ๋ฅ
๋จ์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฒจ ํํฐ๋ง/์ ๋ ฌ ๋ถ๊ฐ
Vector ํ์
vector / vector[]
๋ฒกํฐ ์๋ฒ ๋ฉ์ ์ ์ฅํ๋ ํ์ ์ ๋๋ค. pgvector ํ์ฅ์ด ํ์ํฉ๋๋ค.- ๋จ์ผ ๊ฐ
- ๋ฐฐ์ด
- PostgreSQL:
vector(1536)(pgvector ํ์ฅ) - TypeScript:
number[] - JSON:
number[]
dimensions: ๋ฒกํฐ ์ฐจ์ (ํ์, ์: 1536)
๋ ์์๋ณด๊ธฐ - Vector Search - Vector ๊ฒ์ ์์ธ
๊ฐ์ด๋ - pgvector - PostgreSQL vector ํ์ฅ
tsvector
PostgreSQL ์ ๋ฌธ ๊ฒ์(Full-Text Search)์ ์ํ ํ์ ์ ๋๋ค.- PostgreSQL:
tsvector - TypeScript:
string - JSON:
string
์ ๋ฌธ ๊ฒ์: ์์ฐ์ด ํ
์คํธ์ ํค์๋ ๊ฒ์์ ์ต์ ํ๋ ํ์
์
๋๋ค. ํํ์ ๋ถ์, ์ด๊ฐ ์ถ์ถ ๋ฑ์
์ง์ํฉ๋๋ค.
Relation ํ์
๋ค๋ฅธ Entity์์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ํ์ ์ ๋๋ค.BelongsToOne: N:1 ๊ด๊ณOneToOne: 1:1 ๊ด๊ณHasMany: 1:N ๊ด๊ณManyToMany: N:M ๊ด๊ณ
๋ ์์๋ณด๊ธฐ - Relations - Relation ์์ธ ๊ฐ์ด๋
ํ์ ์ ํ ๊ฐ์ด๋
์ซ์ ์ ์ฅ
| ๋ฐ์ดํฐ | ํ์ | ์ด์ |
|---|---|---|
| ID, ๋์ด, ๊ฐ์ | integer | ์ผ๋ฐ์ ์ธ ์ ์ |
| ํฐ ID, ํ์์คํฌํ | bigInteger | ํฐ ๋ฒ์ ํ์ |
| ๊ธ์ก, ๊ฐ๊ฒฉ | number (precision, scale) | ์ ํํ ์์์ |
| ๊ณผํ์ ์ธก์ ๊ฐ | number (numberType: real) | ๊ทผ์ฌ๊ฐ ํ์ฉ |
| ์ด์ ๋ฐ ๊ณ์ฐ | numeric | ์ ๋ฐ๋ ์์ค ๋ฐฉ์ง |
๋ฌธ์์ด ์ ์ฅ
| ๋ฐ์ดํฐ | ํ์ | ์ด์ |
|---|---|---|
| ์ด๋ฆ, ์ด๋ฉ์ผ | string (length: 255) | ์ผ๋ฐ์ ์ธ ํ ์คํธ |
| ์ค๋ช , ๋ณธ๋ฌธ | string (length ์๋ต) | ๊ธด ํ ์คํธ |
| ์ํ, ์ญํ | enum | ์ ํ๋ ๊ฐ ๋ชฉ๋ก |
| UUID, ํ ํฐ | uuid | ๊ณ ์ ์๋ณ์ |
๋ ์ง/์๊ฐ ์ ์ฅ
| ๋ฐ์ดํฐ | ํ์ | ์ค์ |
|---|---|---|
| ์์ฑ์ผ์ | date | dbDefault: "CURRENT_TIMESTAMP" |
| ์์ ์ผ์ | date | ์ ๋ฐ์ดํธ ํธ๋ฆฌ๊ฑฐ ํ์ |
| ๋ ์ง๋ง | date | ์๊ฐ์ 00:00:00 |
๋ณต์กํ ๋ฐ์ดํฐ
| ๋ฐ์ดํฐ | ํ์ | ์ด์ |
|---|---|---|
| ์ค์ , ๋ฉํ๋ฐ์ดํฐ | json | ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ |
| ๊ณ์ฐ ํ๋ | virtual | ์ ์ฅ ๋ถํ์ |
| ํ ์คํธ ์๋ฒ ๋ฉ | vector | AI ๊ฒ์ |
| ์ ๋ฌธ ๊ฒ์ | tsvector | ํค์๋ ๊ฒ์ |
๋ค์ ๋จ๊ณ
Relations
Entity ๊ฐ ๊ด๊ณ ์ ์ํ๊ธฐ
Enums
Enum ํ์
์ฌ์ฉํ๊ธฐ
Indexes
์ธ๋ฑ์ค๋ก ๊ฒ์ ์ฑ๋ฅ ํฅ์ํ๊ธฐ
Vector Search
Vector ๊ฒ์ ์ค์ ํ๊ธฐ