[TIL]Prisma+MySQL 연결하기

Sohee Yeo·2024년 1월 2일
0
post-thumbnail

Prisma

Prisma는 직관적인 데이터 모델, 자동 마이그레이션, 타입 안전성 및 자동 완성 기능을 제공하는 차세대 ORM이다.
📌 ORM: Object-Relational Mapping. 객체로 연결해준다는 의미. 어플리케이션과 데이터베이스 연결 시 SQL 언어가 아닌 어플리케이션 개발 언어를 사용하여 데이터베이스에 접근할 수 있게 해주는 툴

Prisma 설치

아래 명령어로 Prisma를 설치한다.

npm install prisma --save-dev

설치 후 아래 명령어로 Prisma를 실행한다.

npx prisma init

실행하면 프로젝트 파일의 루트 디렉토리에 prisma 폴더와 .env 파일이 생성된다.

데이터베이스 연결

MySQL에 접속해 아래 명령어로 연결할 데이터베이스를 생성한다.

CREATE DATABASE my_db;

.env 파일에는 데이터베이스 URL을 저장할 수 있다.

DATABASE_URL="db종류://유저이름:비밀번호@HOST:포트/데이터베이스"
  • 예시
DATABASE_URL="mysql://root:1234@localhost:3306/my_db"

schema 파일 작성

prisma 폴더에 들어가면 schema.prisma 파일이 존재한다. schema.prisma 파일은 Prisma를 설정하는 메인 파일이다.

schema.prisma 파일은 크게 세 부분으로 나뉜다.

  • Generators Prisma client를 기반으로 생성할 클라이언트를 지정하는 부분
  • Data sources 어떤 데이터베이스와 연결할지 설정하는 부분
  • Data model definition 데이터 모델 및 관계 정의하는 부분

아래와 같은 양식으로 작성한다.

// prisma/schema.prisma

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

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

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String
  password  String
  posts     Post[]
}

model Post {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  title     String?
  content   String?
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
}

...

각 모델은 하나의 id만 가질 수 있고 @default()로 기본값을 설정, autoincrement()로 자동 증가하는 id값을 설정할 수 있다.

String? 은 String 혹은 null이 될 수 있다는 의미이다.

User와 Post 간 1:N 관계가 있을 때 Post[]로 표현, Post 모델에서는 @relation(fields: [authorId], references: [id])를 입력한다.
→ Post의 authorId는 User의 id를 참조한다는 의미.

Prisma Migrate

마이그레이션을 통해 schema.prisma에서 정의한 Schema를 바탕으로 DB에 테이블을 생성할 수 있다.

npx prisma migrate dev --name init

위의 명령어로 마이그레이션을 실행하면 prisma/migrations/날짜_init/migration.sql 파일이 생성된다.

마이그레이션 실행 후, MySQL에 접속해 생성된 테이블을 확인할 수 있다.

mysql> SHOW TABLES;
+--------------------+
| Tables_in_my_db    |
+--------------------+
| _prisma_migrations |
| user               |
| post               |
+--------------------+



참조

https://www.prisma.io/docs/orm/overview/introduction/what-is-prisma

https://www.prisma.io/docs/getting-started/setup-prisma/add-to-existing-project/relational-databases-node-mysql

https://jalynne-kim.medium.com/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EB%B0%B1%EC%97%94%EB%93%9C-orm-object-relational-mapping-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98-%ED%99%9C%EC%9A%A9%EB%B0%A9%EC%95%88-c43b69028957

https://www.prisma.io/docs/orm/prisma-schema/data-model/relations

profile
실패에 무딘 사람. 프론트엔드 개발자를 꿈꿉니다

0개의 댓글