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의 DATABASE_URL에 입력해주면 아주 쉽게 DB가 연동된다.
.env
생성DATABASE_URL="mysql://{터미널에 출력된 주소}/{DB이름}"
schema.prisma에서 생성한 Schema들은 Class의 interface와 비슷하다.
각 field가 가지는 type에 대해 선언하며, 추가적으로 DB에서 사용되는 field 들의 특성을 optinal하게 부여할 수 있다.
model Users {
id Int @id @default(autoincrement())
}
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로 받겠음.
}
최근 새로운 방식으로 참조 무결성을 설정하는 방법이 도입되었다.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
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
}
Schema를 작성했다면 해당 DB를 Planet Scale에 Push함.
그렇다면, 본인이 설정한 DB언어 (SQL)로 컴파일이 되어 해당 DB에 저장된다.
npx prisma db push
Client
는 mongoose / pymongo와 같은 역할
을 한다.Cellection
을 가리키며 create는 해당 Collection의 Create를 의미한다.import { PrismaClient } from '@prisma/client';
const client = new PrismaClient(); // client 생성자 선언 & 할당
client.user.create({
data: {
},
});
nested Object 형태로 데이터를 전달한다. data라는 key를 가진 필드에 작성한 Model에 맞는 field들을 추가해준다.
추가된 데이터들을 확인해보자.
npx prisma studio
CRUD는 공식문서에 자세히 설명되어있으니 공식문서를 참고하는 것이 좋은 방법이다.