Prisma 알아보기 (with PlanetScale)

mason.98·2022년 9월 17일
2

NEXT

목록 보기
5/6

💬 Prisma?

노드/타입스크립트와 데이터베이스 사이에서 번역기(ORM) 역할

💬 ORM(Object-Relational-Mapping)?

DB데이터(스키마)를 객체(Object)로 연결해주는 역할이다.
프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구이다.


💬 다양한 Prisma의 기능들

Prisma는 SQL 언어를 모르더라도 타입스크립트로 작성할 수 있다.
기존 SQL언어는 많은 오버헤드(수동연결, 반복적인 작업)가 발생된다.

schema.prisma: Model을 생성하고 생성한 Model을 DB에 Push하고 SQL-migration을 자동으로 처리하는 파일
client.prisma: Prisma가 Model을 토대로 생성한다.
타입스크립트로 DB를 만질 수 있는 파일
Prisma Studio: Visual Database Browser (DB 관리자 페이지)


💬 Prisma 시작하기

📦 npm i prisma -D (터미널)

Developer Dependency로 Prisma 를 설치한다.

📦 npx prisma init (터미널)

Prisma 를 시작하는 명령어다.

1. 📜 .env 파일
연결하고자하는 DB의 DB_URL을 설정해준다.
2-1. 📜 prisma/schema.prisma 파일 (1)
provider(사용할 DB = mysql) 설정

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

2-2. 📜 prisma/schema.prisma 파일 (2)
User 모델 생성

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

📦 Prisma (확장 프로그램)

VSC의 확장프로그램 Prisma 를 설치한다.
setting.json 파일에 들어가 아래 내용을 추가한다.

"[prisma]": {
    "editor.defaultFormatter": "Prisma.prisma"
  }

💬 PlanetScale ?

Vitess 기반에 MySQL과 호환되는 서버리스 데이터베이스 플랫폼

MySQL과 호환되는: MySQL를 쓰지 않고, 호환되는 무언가를 사용한다.
서버리스: 서버를 우리가 유지보수 및 관리할 필요가 없다.
데이터베이스 플랫폼: 데이터베이스를 제공해주는 역할

💬 Vitess ?
대기업이 규모에 맞게 MySQL를 scale하기 위해 쓰는 오픈소스 데이터베이스.
데이터베이스를 잘게 쪼개서 여러서버에 분산시키는데 특화되어 있다.


📂 Mac에 PlanetScale CLI 설치

설치 후에 VSC 터미널에 pscale 입력하여 설치되었는지 확인한다.

📦 brew install planetscale/tap/pscale
📦 brew install mysql-client (MySQL 설치)
📦 brew upgrade pscale (최신버전 업데이트)

📂 Window에 PlanetScale CLI 설치

📦 Scoop 설치 (Windows용 커맨드 라인 설치 프로그램)
https://scoop.sh/
📦 scoop bucket add pscale
https://github.com/planetscale/scoop-bucket.git
📦 scoop install pscale mysql
📦 scoop update pscale


📂 VSC 터미널에서 PlanetScale

📦 VSC와 PlanetScale 연결

pscale auth login 명령어를 통하여 로그인한다. (PlanetScale 회원가입 필요)

📦 DB 생성

pscale database create DB이름 --region ap-northeast

📦 DB와 PlanetScale 연결

pscale connect DB이름

📦 연결된 DB와 Prisma 연결

// .env 파일
DATABASE_URL="mysql://127.0.0.1:3306/DB이름"

📂 MySQL vs Vitess 차이점

Vitess는 외래키 제약을 하지 않는다.
MySQL에서는 외래키를 생성할 때 그 키가 반드시 존재해야한다.
하지만 Vitess는 외래키가 실제로 존재하는지 확인하지 않는다.
따라서 Prisma의 도움을 받아야 한다.

// schema.prisma 파일
generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["referentialIntegrity"] // 추가
}

datasource db {
  provider             = "mysql"
  url                  = env("DATABASE_URL")
  referentialIntegrity = "prisma" // 추가
}
.
.

📦 DB 스키마 동기화

npx prisma db push

Prisma로 생성한 스키마(Model)를 PlanetScale DB에 동기화 한다.
PlanetScale 사이트 내에 생성한 DB Schema에서 확인할 수 있다.


📂 Prisma Studio

Prisma에서 제공하는 관리자 페이지이다.
VSC에서 npx prisma studio 명령어로 들어갈 수 있다.


📂 Prisma Client

Node/TypeScript를 위한 자동생성과 안전한 쿼리 빌더이다.
몽고DB의 몽구스와 같은 역할을 한다. Mongoose vs Prisma Client

📦 npm install @prisma/client
Prisma Client 설치


📂 API Routes

PrismaClient는 DB에 직접접근할 수 있는 파일이다.
프론트에서 다루는건 말이 안되므로 다룰 수 있는 서버가 필요하다.
그게 바로 API Routes

pages 폴더에 api 폴더를 생성하는 것으로 API 서버가 생성된다.


1
2

profile
wannabe---ing

0개의 댓글