DB

prisma란

프도의길 2023. 8. 25. 20:27

GrapQL 사용하면서 prisma를 같이 사용한다.

TypeORM에 이어 타입스크립트 ORM으로 널리 사용되고 있기도 하고, 데이터베이스 마이그레이션에서도 사용되는 Prisma에 대해 알아보고자 한다. TypeORM과는 또다른 사용 방법을 가지고 있으며, 자체적으로 제공하는 스키마 형성 방식을 이용하면 SQL 쿼리를 직접 짜지 않아도 되는 장점이 있으며, 제공하는 ORM 메서드들 또한 다른 ORM과 비교했을 때 풍부함을 느낄 수 있다.

 

특히 서버리스 오픈소스 플랫폼인 Supabase에서 공식적으로 데이터베이스를 관리할 때 Prisma를 권장하고 있으며, 뿐만 아니라 여느 RDBMS와 같이 Prisma Studio라는 자체 GUI도 제공하는데, 이는 소프트웨어 설치가 필요하지 않아 더욱더 편리하게 느껴졌다.


Prisma란?

Node.js 및 TypeScript용 오픈 소스 ORM으로, TypeORM과 Sequelize와 유사하게 사용된다.

Prisma의 필요성

SQL 쿼리문을 직접 작성할 필요가 없어진다.

Prisma에 존재하는 메소드들을 이용하여 DB를 쉽게 다룰 수 있다.

ORM으로 사용하는 것뿐만 아니라, migration을 하는데에도 유용하게 사용될 수 있다.

프로젝트에 Prisma 세팅 

https://authjs.dev/reference/adapter/prisma

 

@auth/prisma-adapter | Auth.js

Official Prisma adapter for Auth.js / NextAuth.js.

authjs.dev

npm install @prisma/client @auth/prisma-adapter
npm install prisma --save-dev

먼저 install 해준다

//pages/api/auth/[...nextauth].js

import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export default NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
    }),
  ],
});

그리고 위에 처럼 prisma부분을 작성해줍니다.

//src/prisma.schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")//env파일에서 DATABASE_URL주소 데이터베이스와 연결되는 부분입니다
}

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["referentialActions"] // You won't need this in Prisma 3.X or higher.
}

model Account {
  id                 String  @id @default(cuid())
  userId             String
  type               String
  provider           String
  providerAccountId  String
  refresh_token      String?  @db.Text
  access_token       String?  @db.Text
  expires_at         Int?
  token_type         String?
  scope              String?
  id_token           String?  @db.Text
  session_state      String?

  user User @relation(fields: [userId], references: [id], onDelete: Cascade)

  @@unique([provider, providerAccountId])
}

model Session {
  id           String   @id @default(cuid())
  sessionToken String   @unique
  userId       String
  expires      DateTime
  user         User     @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  accounts      Account[]
  sessions      Session[]
}

model VerificationToken {
  identifier String
  token      String   @unique
  expires    DateTime

  @@unique([identifier, token])
}

src/prisma/schema.prisma에 만들어준다 그리고   url  = env("DATABASE_URL") 이부분은 env파일에서 데이터베이스와 연결되는 부분입니다 그래서 하는 방법으로

npx prisma generate --schema=src/prisma/schema.prisma 적용해줍니다 .

그러면 연결된 DB에 model 이생성됩니다

username이 있는데 이부분은 제가 따로 추가했습니다 schema.prisma에서 model 추가 또는 수정할려면 항상 마지막에

npx prisma generate --schema=src/prisma/schema.prisma 적용해줘야합니다. 

'DB' 카테고리의 다른 글

우분투 PostgreSQL설치(pgAdmin 설정)  (0) 2024.03.05
SQL vs. NoSQL  (0) 2022.03.04
관계형 데이터베이스  (0) 2022.02.11
트랜잭션 ACID  (0) 2022.01.21
데이터 베이스 SQL 소개  (0) 2022.01.21