Planet Scale & Prisma 설정부터 CRUD까지

pengooseDev·2023년 2월 1일
0
post-thumbnail

1. 설치(윈도우)

Scoop 설치 (Windows용 커맨드 라인 설치 프로그램)

터미널에 아래의 명령어 순차입력.

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time

irm get.scoop.sh | iex

scoop bucket add pscale https://github.com/planetscale/scoop-bucket.git

scoop install pscale {사용할 DB}
scoop install pscale mysql

scoop update pscale


> 일련의 생성 프로세스

연동

Planet Scale은 key를 생성하고 local에서 개발자가 이를 관리하는 방식을 채택하지 않음. 터미널로 로그인 방식을 채택.

터미널에서 로그인

pscale auth login

pscale connect {DB이름}

prisma 연동

터미널에 출력되는 주소를 Prisma의 DATABASE_URL에 입력해주면 아주 쉽게 DB가 연동된다.

  1. .env 생성
DATABASE_URL="mysql://{터미널에 출력된 주소}/{DB이름}"

schema를 생성하는 이유.

  1. SLQ 자동 Migration
  2. TS의 interface와 같이 client를 생성해 자동완성

schema.prisma에서 생성한 Schema들은 Class의 interface와 비슷하다.
각 field가 가지는 type에 대해 선언하며, 추가적으로 DB에서 사용되는 field 들의 특성을 optinal하게 부여할 수 있다.

model Users {
	id   Int  @id @default(autoincrement())
}
  1. 필드명 : id
  2. 필드 타입 : int
  3. optional : id의 특성(unique)이 보장되고, default로 보여되는 값은 autoincrement() (자동으로 1씩 증가되도록)

참조 무결성

Model의 field가 다른 Model(객체)을 참조를 하는 경우, 피참조 객체의 존재 및 filed의 존재를 확인하는 것.

filed는 다른 Model의 filed를 참조할 수 있다.
로그인 된 유저가 특정 게시글에 댓글을 남기는 경우를 가정하자.

게시글에 남겨지는 댓글은 아래와 같은 하나의 Schema를 갖게 된다.

model Comment {
	id     Int     @id @default(autoincrement())
	text   string  
	user   Users(5)
}

user field에서 Users(5)는 해당 유저의 id가 5임으로 Users Model에서 id가 5인 DB를 참조한다는 의미이다.

해당 방식은 foreign key를 참조하는 방식이라 불린다.
하지만, 해당 Model이나 id가 존재하지 않을 경우 예상치 못한 에러가 발생할 수 있다.
따라서, 참조하는 DB(객체)의 존재를 확인하는 설정을 해주면 안정성이 더욱 올라간다.

//schema.prisma
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["referentialIntegrity"] // 참조 확정성.
}


datasource db {  
	provider = "mysql"  
	url = env("DATABASE_URL")  
	referentialIntegrity = "prisma" //참조 확정을 prisma로 받겠음.  
}

최근 새로운 방식으로 참조 무결성을 설정하는 방법이 도입되었다.

참조 무결성 (최근 v)

generator client {  
	provider = "prisma-client-js"  
}  
  
datasource db {  
	provider = "mysql"  
	url = env("DATABASE_URL")  
	relationMode = "prisma"  
}

Schema 작성 단계

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

datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma" 
}  

model User {
  id        Int      @id @default(autoincrement())
  phone     Int?
  email     String?  @unique
  name      String
  avatar    String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

DB Push

Schema를 작성했다면 해당 DB를 Planet Scale에 Push함.
그렇다면, 본인이 설정한 DB언어 (SQL)로 컴파일이 되어 해당 DB에 저장된다.

npx prisma db push


DB 추가

  1. 클라이언트 생성
    Prisma에서 Clientmongoose / pymongo와 같은 역할을 한다.
    client 뒤에 붙는 user는 Cellection을 가리키며 create는 해당 Collection의 Create를 의미한다.
import { PrismaClient } from '@prisma/client';

const client = new PrismaClient(); // client 생성자 선언 & 할당

client.user.create({
  data: {
  	
  },
});

nested Object 형태로 데이터를 전달한다. data라는 key를 가진 필드에 작성한 Model에 맞는 field들을 추가해준다.


Prisma Studio

추가된 데이터들을 확인해보자.

npx prisma studio


Prisma CRUD

CRUD는 공식문서에 자세히 설명되어있으니 공식문서를 참고하는 것이 좋은 방법이다.

> ref

0개의 댓글