๐ก TIL 20230820 - Prisma
1. Prisma๋?
1) Node.js์ TypeScript ORM
- ORM์ Object Relational Mapping์ ์ฝ์์ด๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒ์ญ๊ธฐ์ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋๋ฐ, JS ๋๋ TS ์ฝ๋์ DB ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๋์์ฃผ๋ ์ญํ ์ ํ๋ค.
- SQL๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ด๋ฅผ ์์ฑํ์ง ์๊ณ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ์์ฑํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ ์ ์๋ค.
- PostgreSQL, MySQL, SQL Server, SQLite, MongoDB์๋ ์ฌ์ฉํ ์ ์๋ค.
2) schema.prisma
- Prisma๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ Prisma์๊ฒ DB๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ค๋ช ํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด ์ค๋ช ์ `schema.prisma`๋ผ๋ ํ์ผ์ ์์ฑํ๋ค.
// schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
role Role @default(USER)
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
published Boolean @default(false)
title String @db.VarChar(255)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
enum Role {
USER
ADMIN
}
- ์ด๋ ๊ฒ `schema.prisma` ํ์ผ์ ์์ฑํ๋ฉด Prisma๋ DB ํ์ ์ ๋ํด ์๊ฒ ๋๊ณ , ์ด๋ฅผ ๋ฐํ์ผ๋ก client๋ฅผ ์์ฑํ๋ค.
3) client
npm install @prisma/client
// schema.prisma
datasource db {
url = env("DATABASE_URL")
provider = "postgresql"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
- client๋ฅผ ์ด์ฉํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ๋ก DB์ ์ง์ ์ํธ์์ฉํ ์ ์๋ค.
- Prisma client๋ ์๋์ผ๋ก ์์ฑ๋๋ type-safe query builder์ด๋ค.
Prisma๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉ ํ ์ ์๊ฒ ํด์ค ๋ฟ๋ง ์๋๋ผ client๋ผ๋ ๊ฒ๋ ์์ฑํด์ฃผ๋๋ฐ, client๋ ์๋์์ฑ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์์ฑ์ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค.
4) Prisma Studio
- Prisma Studio๋ Visual Database Browser์ธ๋ฐ, ๋ค์ ๋งํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ ๊ด๋ฆฌ์ ํจ๋(Admin panel)๊ฐ์ ๊ฐ๋ ์ด๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
๋ ธ๋ง๋ ์ฝ๋ - [ํ์คํ] ์บ๋ฟ๋ง์ผ ํด๋ก ์ฝ๋ฉ
'โ๏ธ What I Learned > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] import { useRouter } from โnext/routerโ์ โnext/navigationโ ์ฐจ์ด (0) | 2023.08.24 |
---|---|
[TIL] Prisma, Planet scale ์ ์ ๋ฐ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.08.22 |
[TIL] Tailwind CSS ์ฅ๋จ์ , ์ฐ์ต์์ (0) | 2023.08.19 |
[TIL] Next.js 13 - getStaticProps, getStaticPaths (feat. 12๋ฒ์ ์์์ getServerSideProps) (0) | 2023.08.18 |
[TIL] Next.js - SSR vs SSG vs ISR (0) | 2023.08.17 |