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 |