⬜ 발단
Node.js와 Prisma를 활용하여 데이터베이스 연동을 진행하던 중, Products 모델을 정의하고 Prisma Client를 통해 타입 세이프한 쿼리를 작성하려는 상황이었습니다.
강의에서는 node_modules/.prisma/client/index.d.ts에 ProductsPayload 등의 타입이 생성된 모습을 보여주었고, 저도 동일한 상태를 기대했습니다
🟧 발단
npx prisma generate 명령을 실행한 후 node_modules/.prisma/client/index.d.ts를 열어보니, 기대했던 ProductsPayload 타입이 보이지 않았습니다.
대신, PrismaClient: any와 같은 기본 타입만 존재하는 코드가 확인되었습니다.
🟨 전개
문제를 해결하기 위해 아래 단계를 순차적으로 시도하였습니다.
- schema.prisma에 Products 모델이 올바르게 정의되어 있는지 확인.
- generator client 블록이 올바르게 작성되어 있는지 점검.
- npx prisma generate를 재실행하여 클라이언트를 다시 생성.
- node_modules/.prisma/client 내부의 타입 정의를 재확인.
이 과정에서 이상한 점을 발견했습니다.
prisma generate 명령어 실행 후 출력 메시지를 살펴보니 아래와 같이 표시되었습니다.
✔ Generated Prisma Client (v6.12.0) to .\generated\prisma in 45ms
즉, Prisma Client가 node_modules/@prisma/client가 아니라 ./generated/prisma 경로로 생성되고 있었던 것입니다.
🟩 위기
경로 문제를 인지한 뒤에도 잠시 혼란스러웠습니다.
강의에서처럼 import { PrismaClient } from '@prisma/client'로 가져오려 했지만, 타입이 전혀 나오지 않아 코드 작성이 불가능했습니다.
실제로는 ./generated/prisma 경로에서만 클라이언트를 import할 수 있는 상태였습니다
🟦 절정
원인을 정확히 파악한 뒤, 아래와 같은 조치를 취했습니다.
- schema.prisma 파일의 generator client 블록을 확인.
- output = "./generated/prisma" 설정이 존재하는 것을 발견하고 제거.
- npx prisma generate를 다시 실행하여 기본 경로(node_modules/@prisma/client)에 클라이언트를 생성.
- 기존에 생성된 ./generated/prisma 폴더를 삭제하여 혼동을 방지
🟪 결말
output 설정을 제거하고 다시 generate한 뒤에는 node_modules/.prisma/client/index.d.ts 안에 ProductsPayload 타입이 정상적으로 생성되었습니다.
이제 강의와 동일하게 다음과 같이 import하여 사용할 수 있게 되었습니다.
import { PrismaClient } from '@prisma/client';
이번 경험을 통해, Prisma Client의 generator client 블록에서 output 경로를 지정하면 타입 정의가 기본 경로가 아닌 별도 경로로 생성된다는 점을 명확히 이해했습니다.
이후에는 프로젝트에서 불필요한 output 설정을 두지 않고 표준 경로를 사용하는 것으로 규칙을 정했습니다.
'이노베이션캠프 > TIL' 카테고리의 다른 글
Node.js 숙련 2주차 강의 정리 - 인증과 인가 구현하기 (0) | 2025.07.23 |
---|---|
Node.js 숙련 1주차 강의 정리 (5) | 2025.07.22 |
이노베이션 캠프 10일차_AWS에 Node.js 서버 배포 (0) | 2025.07.17 |
이노베이션 캠프 9일차_스킬을 구현해보자 (0) | 2025.07.16 |
이노베이션 캠프 8일차_과제 전투시스템 개선 (0) | 2025.07.15 |