prisma는 ORM으로, 객체를 schema로 정의한다음 그 객체와 내가 선택한 데이터 베이스를 연결시켜주는 매개체이다.
server side쪽에서 데이터 베이스를 CRUD가능하도록 해준다.
또한 node js와 typescript를 사용하기에, javascript를 사용하는 사람에게는 안성맞춤일 수 있다.
우선 https://www.prisma.io/docs/getting-started/quickstart 여기에 방문하면 빠르게 시작할 수 있다.
npx prisma init --datasource-provider [내가 사용하고 싶은 database 종류 eg> postgresql]
그러면 schema.prisma 라는 파일이 생기는 데 여기에 model을 정의하자.
그러면 아래처럼 db의 종류와 url이 나온다.
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
이때 env에 url을 정의해준다. 나같은 경우 supabase 를 이용했다. postgreSQL database를 생성하여 배포까지 해주는 opensource이다. 여기서 db를 만들고 url을 env에 설정해준다.
그리고 npx prisma migrate dev --name init
명령어를 입력하여 prisma.scheme에 선언한 data 객체들이 sql로 transpile되어 새로 생긴 prisma 폴더에 sql 파일로 나타난다.
// prisma/migration.sql
-- AlterTable
ALTER TABLE "User" DROP CONSTRAINT "User_pkey",
ADD COLUMN "age" INTEGER NOT NULL,
ADD COLUMN "email" TEXT NOT NULL,
ADD COLUMN "preferences" JSONB NOT NULL,
ADD COLUMN "role" "Role" NOT NULL DEFAULT 'BASIC',
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE TEXT,
ADD CONSTRAINT "User_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "User_id_seq";
...
그리고 나서 prisma generate
을 입력하면 prisma instance가 생성된다.
index.js같은 파일안에서 드디어 prisma instance를 이용해서 query문을 쓰지않고 prisma api를 이용해 postgreSQL db에 data를 CRUD할 수 있게 된다. 아래처럼 말이다.
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
await prisma.user.deleteMany();
const user = await prisma.user.create({
data: {
name: "고짝돌",
email: "zzakdole.com2",
age: 5,
userPreference: {
create: {
emailUpdates: true,
},
},
},
select: {
name: true,
userPreference: { select: { id: true } },
},
});
const result = await prisma.user.findMany({
where: {
email: {
startsWith: "zzakdole",
},
},
});
console.log("result", result);
}
main()
.catch((e) => {
console.error(e.message);
})
.finally(async () => {
await prisma.$disconnect();
});
그리고 package.json 에서 script안에 devStart : nodemon index.js
를 설정해주고 npm run devStart
실행시키면 index.js에서 발생하는 모든 변경사항을 캐치하여 실행한다.
그리고 npx prisma studio
명령어를 입력하면 브라우저에 다른 서버가 열리면서 db를 gui로 한눈에 볼 수 있는 서비스 까지 제공한다.
혹시, remote db(supabase)에 변경을 주고 싶으면 prisma.scheme을 수정하고 npx prisma db push
를 입력해주면 remote db에 반영된다.
model 짜는 방법이나 더 많은 prisma api를 알 고 싶다면 prisma 공문을 읽어보자.
혹시 아래와 같은 에러가 난다?
Please make sure your database server is running at
db.xpdqxuuljksmrjhubmtn.supabase.co
:5432
.
그럼 supabase logs / infrastructure - memory usage를 들여다 보고 특정 에러코드를 검색하거나, 메모리가 너무 소진되지 않았는지 확인하기.
settings - General - restart project를 클릭해보기