Nest.js Prisma Mysql 연동방법

2025-02-06
Nestprismadatabasemysql

Prisma

  • TypeScript 및 JavaScript를 위한 최신 ORM(Object-Relational Mapping) 라이브러리

1. 설치

$ npm install prisma --save-dev
$ npx prisma
$ npx prisma init

으로 설치 및 초기화합니다.

/prisma/schema.prisma

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

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

이 생기는데

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

datasource db {
	provider = "mysql"
	url = env("DATABASE_URL")
}
  1. postgresql을 mysql로 변경합니다.
  2. 그리고 .env파일의 DATABASE_URL을 다음과 같이 변경합니다.
    • DATABASE_URL="mysql://내가설정한데이터베이스호스트:패스워드@127.0.0.1:/db이름?schema=public"

2. prisma generate

/prisma/schema.prisma

model User {
	id Int @id @default(autoincrement())
	name String @db.VarChar(100)
	password String @db.Char(60)
	email String @unique @db.VarChar(100)
	createdAt DateTime @default(now())
	updatedAt DateTime @updatedAt
}
$ npx prisma generate
✔ Installed the @prisma/client and prisma packages in your project

✔ Generated Prisma Client (v6.3.1) to ./node_modules/@prisma/client in 29ms

Start by importing your Prisma Client (See: https://pris.ly/d/importing-client)

Tip: Want real-time updates to your database without manual polling? Discover how with Pulse: https://pris.ly/tip-0-pulse

그럼 @prisma/client가 패키지로 설치됩니다.

2. prisma migrate

$ npx prisma migrate dev
MySQL database new-project created at 127.0.0.1

✔ Enter a name for the new migration: …
Applying migration `20250206024341_`

The following migration(s) have been created and applied from new schema changes:

migrations/
  └─ 20250206024341_/
    └─ migration.sql

Your database is now in sync with your schema.

✔ Generated Prisma Client (v6.3.1) to ./node_modules/@prisma/client in 19ms
✨  Done in 5.06s.
  • 이후 prisma/migrations 폴더 안에 날짜로 된 폴더를 눌러보시면
-- CreateTable

CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`password` CHAR(60) NOT NULL,
`email` VARCHAR(100) NOT NULL,
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,

UNIQUE INDEX `User_username_key`(`username`),
UNIQUE INDEX `User_email_key`(`email`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

이런 sql파일이 생성됩니다.