โœ๏ธ What I Learned/TIL

[TIL] Prisma์— ๋Œ€ํ•ด

Jiwon() 2023. 8. 20. 21:46

๐Ÿ’ก 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)๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.

 

 


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

๋…ธ๋งˆ๋“œ ์ฝ”๋” - [ํ’€์Šคํƒ] ์บ๋Ÿฟ๋งˆ์ผ“ ํด๋ก ์ฝ”๋”ฉ