Dandy Now!
  • [Next.js] prisma에서 DB 테이블 연동이 안되는 문제?!
    2023년 11월 23일 11시 34분 00초에 업로드 된 글입니다.
    작성자: DandyNow
    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
    반응형
    댓글