본문 바로가기

코딩강의/[풀스택]캐럿마켓 클론코딩(노마드코더)

#7 Prisma

1. npm i prisma 설치

2. npx prisma init 초기화

 

* 플러그인 prisma 다운
cmd + shift + p로 JSON settings 파일을 열고

"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
}
추가하면 save시 릴레이션 자동완성 됩니다.

 

3. 기본 세팅 방법

 

향 후 외부 db를 사용하기 전에 연습용 로컬 db를 사용해보자.

 

.env 파일에 아래내용으로 수정 (gitignore파일에 .env, *.db, *.db-journal 추가)

# DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
DATABASE_URL="file:./database.db"

 

schema.prisma 파일에 provider부분 수정 및 모델 생성

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model User {
  id         Int      @id @default(autoincrement())
  username   String   @unique
  email      String?  @unique
  password   String?
  phone      String?  @unique
  github_id  String?  @unique
  avatar     String?
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

 

스키마에 모델 생성 후, npx prisma migrate dev 입력

 

*lib/db.ts

import { PrismaClient } from "@prisma/client";

const db = new PrismaClient();

export default db;

 

1) 프리즈마 클라이언트 연동

 

npx prisma studio로 화면 보기 가능

 

4. 데이터 삭제 시 고려 사항

 

*schema.prisma

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

model User {
  id         Int        @id @default(autoincrement())
  username   String     @unique
  email      String?    @unique
  password   String?
  phone      String?    @unique
  github_id  String?    @unique
  avatar     String?
  created_at DateTime   @default(now())
  updated_at DateTime   @updatedAt
  SMSToken   SMSToken[]
}

model SMSToken {
  id         Int      @id @default(autoincrement())
  token      String   @unique
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
  user       User     @relation(fields: [userId], references: [id], onDelete: Cascade)
  userId     Int
}

 

1) 유저 모델이 부모고 SMSToken모델이 자식이다. 부모 모델을 삭제 할 때, 자식모델도 같이 삭제하려면 자식 모델에 onDelete: Cascade를 추가해주자. 아래 내용 참조

 

[Referential Actions]
Referential actions는 관련된 레코드가 삭제되거나 업데이트될 때 어떤 일이 발생하는지를 결정합니다. Prisma는 아래의 referential actions 종류를 지원합니다.

(onDelete 기준으로 설명합니다.)
Cascade: 참조 레코드를 삭제하면 참조 레코드의 삭제가 트리거됩니다.
Restrict: 참조 레코드가 있는 경우 삭제를 방지합니다.
NoAction: Restrict과 유사하지만 사용 중인 데이터베이스에 따라 다릅니다.
SetNull: 참조 필드가 NULL로 설정됩니다. (optional일 때만 정상 작동)
SetDefault: 참조 필드가 기본값으로 설정됩니다.

referential action을 설정 안했을 때 기본 동작 등 자세한 내용은 공식 문서에 나와있습니다.
https://www.prisma.io/docs/orm/prisma-schema/data-model/relations/referential-actions

'코딩강의 > [풀스택]캐럿마켓 클론코딩(노마드코더)' 카테고리의 다른 글

#9 Social Authentication  (0) 2024.07.28
#8 Authentication  (0) 2024.07.28
#6 Validation  (0) 2024.07.25
#5 SERVER ACTIONS  (0) 2024.07.18
#4 AUTHENTICATION UI  (0) 2024.07.17