백엔드/Prisma
Prisma 튜토리얼
SeungYn
2024. 2. 27. 18:57
1. Creact project setup
타입스크립트 환경을 위한 라이브러리 설치 및 프리즈마 설치
npm init -y
npm install prisma typescript ts-node @types/node --save-dev
타입스크립트 세팅
npx tsc --init
프리즈마 초기 세팅
npx prisma init
npx prisma init 명령어 실행 후 아래 같은 폴더구조가 생기는데
prisma 폴더에는 프리즈마 관련 파일
.env 환경설정 파일이 생깁니다.
./
├── .env
├── package-lock.json
├── package.json
├── prisma
│ └── schema.prisma
└── tsconfig.json
2. Connect your database
prisma/schema.prisma 파일을 보면 아래와 같이 작성 돼있습니다
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
Mysql을 사용하려면 아래처럼 변경합니다.
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
이후 .env 파일 내용만 자신의 db 설정에 맞게 변경해 주면 db연결세팅은 끝납니다.
DATABASE_URL="mysql://root:randompassword@localhost:3306/mydb"
3. Using Prisma Migrate
스키마 작성을 위해 prisma/schema.prisma 파일을 수정합니다.
// This is your Prisma schema file,
// learn more about it in the docs: <https://pris.ly/d/prisma-schema>
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: <https://pris.ly/cli/accelerate-init>
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
이후 npx prisma migrate dev --name init 를 실행시킵니다.
npx prisma migrate dev --name init
위의 명령어를 실행시키면 sql 파일을 작성후 sql문을 실행시킵니다. 그 후 generator이 명시되어 있고 @prisma/client가 설치되어있지 않다면 설치합니다.
@prisma/client은 디비를 조작할 수 있도록하는 라이브러리입니다.
스키마가 수정되면 prisma migrate dev or prisma db push를 호출하여 항상 db와 동기화가 되도록합니다.
아래는 mysql 결과입니다.
4. Querying the database
프로젝트 폴더 맨 위에 Index.ts 만들어 prisma를 이용하여 db를 조작할 수 있습니다.
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
// 생성
await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Hello World' },
},
profile: {
create: { bio: 'I like turtles' },
},
},
});
const allUsers = await prisma.user.findMany({
include: {
posts: true,
profile: true,
},
});
console.dir(allUsers, { depth: null });
// 업데이트
const post = await prisma.post.update({
where: { id: 1 },
data: { published: true },
});
console.log(post);
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});