PlanetScale 이란?
MySQL 과 호환되는 Serverless Database Platform 이다.
- Serverless Database Platform 이다.
- 개발자 및 개발자 작업 흐름에 따라 디자인되었다.
- MySQL 8.0 위에서 작동하여 MySQL 8.0 의 안정성과 오픈소스인 Vitess 의 확장성을 갖춘 완벽히 관리되는 데이터베이스를 10초 안에 배포한다.
- DB 에 대한 배포, 브랜치, 쿼리를 UI 에서 바로 할 수 있다.
- 원한다면 CLI 를 다운받아서 실행할 수도 있다.
- built-in connection pooling 이 있어서 connection limit 을 경험할 일이 없다.
Vitess 는 MySQL 의 수평적 스케일링을 제공하는 DB 클러스터링 시스템이다. Youtube 를 스케일링하기 위해 Google 에서 만들어진 도구로 유명하다.
장점
Horizontal Scale
- 수평적 샤딩을 제공하여 앱에 복잡함 없이도 제한없는 수의 데이터베이스 샤드를 제공한다.
High Availability
- Vitess 의 레플리카 설정으로 부드러운 failover 를 제공한다.
MySQL Compatible
- MySQL 과 호환되어 MySQL 과 마이그레이션하기도 쉽다.
Online Schema Migration
- 온라인 스키마 마이그레이션을 제공한다.
무료 플랜이 뛰어나다
- 무료로 이용해도 10GB 의 저장공간과 수많은 읽기/쓰기 횟수 등을 제공한다.
개발자 경험(DX)이 매우 좋다.
- git command 쓰는것처럼 CLI 로 다양한 작업을 할 수 있다.
데이터베이스에 브랜치를 제공한다.
- 깃에서 제공하는 브랜치와 비슷하게 데이터베이스에서도 브랜치를 만들 수 있다.
- 브랜치는 나중에 메인 소스와 합칠 수도 있다.
Planet Scale CLI
Planet Scale CLI 는 pscale
이라는 이름으로 실행되는데, Planet Scale 의 가장 큰 장점 중 하나가 CLI 인만큼 반드시 설치하는 것이 좋다.
설치
여기 공식문서 를 보고 운영체제별로 다른 방법으로 설치할 수 있다. 설치 이후 pscale
명령어가 잘 듣는다면 정상적으로 설치가 된 것이다.
전체 명령어 목록
$ pscale
pscale is a CLI library for communicating with PlanetScale's API.
Usage:
pscale [command]
Available Commands:
audit-log List audit logs
auth Login and logout via the PlanetScale API
backup Create, list, show, and delete branch backups
branch Create, delete, diff, and manage branches
completion Generate completion script for your shell
connect Create a secure connection to a database and branch for a local client
data-imports Create, list, and delete branch data imports
database Create, read, delete, and dump/restore databases
deploy-request Create, review, diff, revert, and manage deploy requests
help Help about any command
org List, show, and switch organizations
password Create, list, and delete branch passwords
region List regions
service-token Create, list, and manage access for service tokens
shell Open a MySQL shell instance to a database and branch
signup Signup for a new PlanetScale account
Flags:
--api-token string The API token to use for authenticating against the PlanetScale API.
--api-url string The base URL for the PlanetScale API. (default "https://api.planetscale.com/")
--config string Config file (default is $HOME/.config/planetscale/pscale.yml)
--debug Enable debug mode
-f, --format string Show output in a specific format. Possible values: [human, json, csv] (default "human")
-h, --help help for pscale
--no-color Disable color output
--service-token string Service Token for authenticating.
--service-token-id string The Service Token ID for authenticating.
--version Show pscale version
Use "pscale [command] --help" for more information about a command.
위와 같이 다양한 명령어를 제공한다. 모든 명령어들은 PlanetScale 의 API 에서 기반한다.
로그인
pscale auth login
위 명령어를 치면 자동으로 브라우저가 뜨고 Confirm 버튼만 누르면 된다.
지원하는 지역 보기
pscale region list
어느 지역에 서버가 있는지 볼 수 있다.
디비 만들기
pscale database create carrot-market --region ap-northeast
디비명은 carrot-market
이 되고 region
이 ap-northeast
인 곳에 설치가 된다. ap-northeast
는 도쿄를 말한다. (AWS ap-northeast-1 (Tokyo) / ap-northeast
) 한국이 없는 관계로 여기에라도 설치하자.
암호 없이 로컬에서 디비와 연결하기
pscale connect carrot-market
컴퓨터와 planet-scale 간의 보안 터널을 만든다.
이 기능은 암호도 필요 없이 마치 내 로컬 환경에서 MySQL 을 실행한것처럼 DB 를 켜준다. 이 기능 하나만으로도 어마어마한 보안 위협으로부터 해소될 수 있다.
Prisma 와 연동 시에 주의점
PlanetScale 은 vitess 를 기반으로 만들어져있는데, vitess 는 MySQL 과 같은 디비를 Horizontal Scaling 해준다. 그러면서 MySQL 과는 약간 다른 점이 생긴다.
외래키 제약 조건(Foreign Key Constraint) 을 지원하지 않는다.
PlanetScale 은 외래키 제약조건(Foreign Key Constraint) 이 적용되지 않는다. 그 이유는 PlanetScale 이 사용하는 vitess 의 Horizontal Scaling 때문이다.
다행히 Prisma 와 연동하면 Prisma 측에서 이를 체크해줄 수 있다. 다만, 설정파일에 내용을 약간 추가해주어야 한다.
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialIntegrity"] // (*)
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
referentialIntegrity = "prisma" // (*)
}
별표친 곳처럼 코드를 수정하면 된다.
GUI 사용법
스키마 보기
https://app.planetscale.com/ 에 접속하여 branches
를 클릭하고 Schema
탭으로 가서 Refresh Schema
버튼을 누르면 보인다.