NextJS + Prisma + PlanetScale 사용 방법

우선 PlanetScale(https://planetscale.com/) 사이트에 접속해서 계정 생성을 완료합니다.

 

다음은 PlanetScale CLI를 설치하기 위해 powershell 터미널 창을 열고 아래 명령어를 입력해 scoop을 설치합니다. (참고: https://scoop.sh/)

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time
irm get.scoop.sh | iex

 

scoop 설치 후 pscale을 설치합니다. (참고: https://github.com/planetscale/cli#installation)

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

 

자, 이제 PlanetScale CLI가 설치되었으니 테스트 할 새로운 NextJS 프로젝트를 하나 생성합니다.

npx create-next-app@latest

해당 프로젝트 폴더에 들어가서 prisma 패키지를 설치합니다.

npm i prisma -D
npm i @prisma/client

prisma 초기화 명령어를 입력합니다.

npx prisma init

초기화 명령어 실행 후 schema.prisma 와 .env 파일이 생성됩니다.

npx prisma init

schema 편집을 편리하게 하기 위해 vscode extension을 설치해줍니다.

vscode extension - Prisma

schema.prisma 파일에 아래와 같이 사용할 table의 schema를 정의 해줍니다. prisma schema 정의 방법에 대한 자세한 설명은 https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#model-field-scalar-types 에서 확인 하시면 됩니다.

기본 생성된 schema에 db provider가 postgresql로 되어있는데 mysql로 변경합니다.

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

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

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

model Test {
  id   Int    @id @default(autoincrement())
  name String
}

 

PlanetScale 과 연결을 위해 아래 명령어를 입력해서 PlanetScale 사이트 로그인을 진행합니다.

pscale auth login

 

로그인 완료 후 터미널창에 아래와 같이 로그인 완료 메세지를 확인합니다.

 

이제 PlanetScale에서 생성해놓은 Database와 연결하기 위해 아래 명령어를 입력합니다. (예: DB명이 mytestdb일 경우)

pscale connect mytestdb

 

.env 파일에 DATABASE_URL을 아래와 같이 변경해줍니다.

DATABASE_URL="mysql://127.0.0.1:3306/mytestdb"

 

schema.prisma에 정의한 table model을 DB에 생성하기 위해 아래 명령어를 입력합니다.

npx prisma db push

 

push가 성공적으로 완료되면 PlanetScale 웹 사이트에서 새로운 테이블 하나가 생성된 것을 확인 할 수 있습니다.

https://app.planetscale.com/youraccount/mytestdb

 

위 화면에서 Tables를 클릭해보면 생성된 Table 스키마를 확인 할 수 있습니다.

여기까지 마무리하면 이제 NextJS에서 PlanetScale에 생성된 DB로 읽고 쓰기를 할 수 있습니다.