Prisma // ORM(Object Relational Mapping)
☑️ 객체지향 프로그래밍
- 클래스 사용
☑️sql (관계형 데이터베이스)
- 테이블 단위로 관리
==> 둘 간의 불일치가 존재
📍ORM
- ORM을 통해 객체 간의 관계를 바탕으로 sql 자동으로 생성하여 불일치 해결
- 객체를 통해 간접적으로 데베의 데이터를 다룸
- 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑
- 각 테이블 또는 구분하고자 하는 데이터 단위를 객체로 구현하고 데이터 간의 관계를 형성
📍prisma
- node.js 쪽의 백앤드에서의 데이터베이스 orm
1)세팅
☑️설치방법
npm install -D prisma
☑️초기화
npx prisma init
위를 실행하면 기본적인 설정이 만들어짐
2) shcema.prisma 파일 생성
1) prisma 의 shcema.prisma 파일 생성
--> 이것이 sql, postgresql 등에서 테이블로 전환
2) .env 파일 생성
- .env 파일의 역할: 프로젝트의 환경 변수를 저장하는 파일입니다. 데이터베이스 연결 정보, API 키 등 중요한 정보를 안전하게 관리할 수 있게 해 줍니다.
- 파일 생성 방법: 프로젝트 루트 경로(최상위 폴더)에 .env 파일을 생성합니다. 윈도우에서 파일명을 .env.로 입력하면 .env 파일이 생성될 수 있습니다. 이 파일에 필요한 환경 변수 값을 정의합니다
☑️shcema.prisma
generator client {
provider = "prisma-client-js"
} //prisma는 백엔드이기에 nexjs와 같은 client 쪽에스 prisma db를 연결하려면 prisma-client 필요
datasource db {
provider = "postgresql" //어떤 종류의 db를 쓰는지
url = env("DATABASE_URL") //해당 파일의 url
}
//모델 작성 - prisma 사이트
- prisma에서는 테이블을 모델로 작성
https://authjs.dev/reference/adapter/prisma
model User {
id Int @id @default(autoincrement()) //id를 자동을 하나씩 증가
email String @unique
name String?
password String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
3)코드와 연결
- npx prisma migrate dev --name init
:데이터베이스 스키마 변경 사항을 추적하고 버전 관리하기 위한 마이그레이션 파일을 생성
- npx prisma dp push
:개발 중인 스키마의 최신 상태를 바탕으로 데이터베이스 스키마를 직접 변경하거나 업데이트합니다. 마이그레이션 파일을 생성하지 않으며, 스키마 파일(schema.prisma)에 정의된 상태로 데이터베이스를 동기화
4) prisma client 설치
- Next.js에서 prisma 사용 할 수 있도록
npm install next-auth @prisma/client
☑️ lib/prismadb.ts
- prisma client 생성
import { PrismaClient } from "@prisma/client";
declare global {
var prisma: PrismaClient | undefined;
} //client가 prisma에 할당하기 전
const client = globalThis.prisma || new PrismaClient();
//
if(process.env.NODE_ENV !== 'production') globalThis.prisma = client;
export default client;
참고 사이트 )