Nest.js를 배워보자

🔄 MySQL CREATE TABLE 문으로 Prisma 스키마 만들기

_Blue_Sky_ 2025. 12. 9. 23:48
728x90

직접적으로 MySQL의 CREATE TABLE 문을 복사해서 Prisma 스키마 파일(schema.prisma)로 만들 수는 없습니다.

하지만, 기존의 MySQL 데이터베이스(테이블)가 이미 존재한다면, Prisma CLI의 강력한 기능을 사용하여 해당 데이터베이스의 구조를 읽어 들여 자동으로 Prisma 스키마를 생성할 수 있습니다.


🛠️ 기존 DB 구조를 역으로 가져오는 방법: prisma db pull

Prisma는 데이터베이스 구조를 역으로 스키마 파일로 가져오는 "Introspection"이라는 기능을 제공하며, 이를 위해 prisma db pull 명령어를 사용합니다.

1. 전제 조건

  • schema.prisma 파일이 프로젝트 내에 존재해야 합니다.
  • datasource db 블록에 **유효한 DATABASE_URL**이 설정되어 있어야 합니다. 이 URL을 통해 Prisma가 MySQL 데이터베이스에 연결합니다.
     
    // schema.prisma 파일 예시
    datasource db {
      provider = "mysql"
      // .env 파일에 설정된 실제 MySQL 연결 정보
      url      = env("DATABASE_URL") 
    }
    

2. 명령어 실행

다음 명령어를 터미널에서 실행하면 됩니다.

npx prisma db pull

3. 동작 방식

  1. 연결 확인: prisma db pull 명령은 schema.prisma 파일의 DATABASE_URL을 사용하여 MySQL 데이터베이스에 접속합니다.
  2. 구조 분석 (Introspection): 데이터베이스에 정의된 모든 테이블, 칼럼 이름, 데이터 타입, 제약 조건(PK, FK, Unique) 등을 분석합니다.
  3. 스키마 생성: 분석된 내용을 바탕으로 schema.prisma 파일에 해당 테이블에 대응하는 model 정의를 자동으로 추가하거나 업데이트합니다.

예를 들어, MySQL에 다음과 같은 CREATE TABLE 문으로 생성된 테이블이 있다면:

CREATE TABLE `Todo` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `content` TEXT,
  `is_done` BOOLEAN DEFAULT 0,
  PRIMARY KEY (`id`)
);

npx prisma db pull을 실행하면 schema.prisma 파일에 다음과 같은 model이 생성됩니다.

model Todo {
  id      Int      @id @default(autoincrement()) @map("id") // @map은 MySQL 칼럼 이름과 다른 경우 사용될 수 있음
  title   String   @db.VarChar(255)
  content String?  @db.Text
  is_done Boolean? @default(false)
}

💡 요약

MySQL의 SQL 코드를 직접 복사 붙여넣기 할 필요 없이, npx prisma db pull 명령을 사용하여 실제 연결된 데이터베이스의 최신 구조를 기반으로 Prisma 스키마를 자동 생성할 수 있습니다.

728x90