언어·프레임워크/Next.js

[Next.js] prisma에서 DB 테이블 연동이 안되는 문제?!

DandyNow 2023. 11. 23. 11:34
728x90
반응형

1. 왜 prisma에서 DB 테이블 연동이 안 되는 걸까?

Next.js 프로젝트에 prisma ORM을 적용하여 작업 중이다. 새로운 모델(CouponSetting)을 만들었다.

// prisma/migrations/schema.prisma
// (생략)
model CouponSetting {
  id                 Int       @id @default(autoincrement())
  //(생략)
}

변경된 내용을 적용하기 위해 마이그레이션 명령어를 실행하였다( <migration_name>에 로그를 위한 마이그레이션 명을 임의로 작성).

npx prisma migrate dev --name <migration_name>   // 마이그레이션 생성
(npx prisma migrate dev 명령 입력, 엔터 후 이름을 작성해도 된다.)

변경된 모델에 맞게 Prisma Client를 재생성하였다.

npx prisma generate

이 모든 과정은 오류 없이 완료되었다. 그런데 왜 CouponSetting 모델과 prisma가 연동되지 않는 걸까?

 

2. 빈틈없이 모든 과정을 마쳤다면, 그냥 VSCODE를 껐다 켜라!

모델을 추가하고 마이그레이션과 관련된 모든 명령어가 잘 수행되었음에도 불구하고 prisma와 해당 모델로 인해 생성된 테이블과 연동이 되지 않았다. 기존에 있던 테이블과의 연동은 아무 문제없었으니 더 미칠 노릇이다. 한참의 시간 동안 씨름하다 VSCODE를 재구동해 보았다. 그랬더니 prisma에서 CouponSetting에 접근할 수 있었다. 뭔가 당한 느낌을 컴퓨터한테 받다니...

아래는 해당 컴포넌트 코드이다.

// route.ts
import prisma from "@/app/lib/prisma";

interface CouponSetting {
  // (생략)
}

export async function POST(request: Request) {
  const body: CouponSetting = await request.json();

  // 아래 코드가 prism와 couponsetting 테이블의 연동이 필요한 부분이다.
  // couponsetting 테이블이 prisma에게 인식이 되면 체이닝할때 에러 없이 연결이 가능하다.
  //
  // [특이 사항]
  // 1. prisma 모델을 작성할 때 파스칼 케이스(CouponSetting) 사용함
  // 2. 마이그레이션 후 couponsetting라는 DB 테이블명 생성됨
  // 3. prisma 사용을 위해 체이닝할때는 카멜 케이스(couponSetting)로 접근 가능함
  const createdCouponSetting = await prisma.couponSetting.create({ 
    data: {
      // (생략)
    },
  });

  return new Response(JSON.stringify(createdCouponSetting));
}

 

728x90
반응형