prisma + planetscale 찍먹

SangBooom·2022년 2월 20일
3

현재 회사에서 백엔드로 firebase를 사용하고있다. 서버 구축할 필요도 없고 nosql로 프론트에서 query 작성하고 api함수 만들고 전송하고 받기만 하면 된다. 회사의 특성상 파이어베이스로 충분히 백엔드를 커버해도 되지만 개인적인 생각으론 next

prisma

프리즈마는 타입스크립트,node js ORM 이다.
프리즈마를 통해 SQL 작성을 타입스크립트로 하는것이다.

ORM이란?

ORM은 간단히 말해서 번역기 역할을 해주는 것이다.
자바스크립트,타입스크립트 코드와 DB사이의 다리를 놓아주는거다.

planetscale

공홈을 가보면 mysql 호환 서버리스 데이터 플랫폼이라고 써있다.
서버리스는 서버가 없다는 뜻이 절대 아니고 우리가 관리하고 유지보수 하지 않아도 된다는 뜻이다.
플래닛스케일은 데이터베이스를 제공해주는 플랫폼이다.

vitess는 유튜브를 scale하기 위해서 구글이 만든건데 대기업들이 규모에 맞게 Mysql을 scale하기 위해 쓰는 방법이라고 한다.
mysql을 좀 더 쉽게 scaling 할 수 있도록 하는 시스템이다.

planetscale은 DX(개발자경험)이 엄청나게 뛰어나다고 생각한다. git과 비슷하게 명령어로 branch를 만들고 삭제하고 불러올 수도 있다.

보안도 secure tunnel을 통해 쉽고 더욱 안전하게 된다. 비밀번호나 데이터베이스를 두개만들어서 하나는 보안용으로 가지고 있을필요가 없다.

schema.prisma

이 파일은 두가지 목적을 위해서 수정한다.
1. model들을 데이터베이스에 push하고 SQL migration을 자동으로 처리하기 위함
2. 데이터베이스와 상호작용 하기 위해 client를 생성

둘의 조합이 좋은 이유

planetscale은 mysql이 아니다. vitess 기반이라 mysql은 아니라서 다른점이 있다.

Users
	id : 1
    name : psb
Comments 
	id : 1
    userId : (Users id : 5)

대충 의미상으로 이런 db가 있다고 하자. userId는 foreign key인데 여기서 Users모델에서 id 5인 유저의 댓글을 가져온다고 했을때
mysql은 에러가 에러가 났을텐데 planetscale은 에러가 나지않는다.. 이걸 보완하기 위해 db에서 못잡는걸 prisma를 통해서 이런 심각한 레퍼런스에러를 잡도록 한다.

// scheme.prisma

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

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

이게 무슨 뜻이냐면, 다른 객체에 연결될 때 그 객체가 존재하길 바란다는 뜻이다.

profile
끊임없이 떨어지는 물방울이 바위를 뚫는다

0개의 댓글