-
03. Prisma 7 + NestJS 셋업 트러블 슈팅 — `datasources`는 이제 없다프로젝트/개인프로젝트 2026. 2. 26. 13:49
환경: NestJS + Prisma 7.4.1 + PostgreSQL / macOS
배경
NestJS 백엔드 프로젝트를 새로 세팅하면서 Prisma를 ORM으로 선택했다. 예전에 쓰던 코드를 그대로 가져왔는데, 서버를 켜는 순간 오류 폭탄을 맞았다. Prisma 7은 이전 버전과 설정 방식이 완전히 바뀌어 있었다.
1단계 오류 —
datasourcesis Unknown서버 실행 시 처음 만난 오류:
PrismaClientConstructorValidationError: Unknown property datasources provided to PrismaClient constructor.기존
PrismaService는 이렇게 생겼었다:super({ datasources: { db: { url: process.env.DATABASE_URL }, }, } as any);Prisma 6까지는 잘 동작하던 코드다. 그런데 Prisma 7에서는
datasources옵션이 생성자에서 완전히 제거됐다. 에러 메시지를 보고 공식 문서 링크(https://pris.ly/d/client-constructor)를 따라가 봤다.
2단계 오류 —
PrismaClientInitializationError: non-empty options requireddatasources를 제거하고super()만 쓰니 이번엔 이런 오류가 났다:PrismaClientInitializationError: `PrismaClient` needs to be constructed with a non-empty, valid `PrismaClientOptions`Prisma 7에서는
prisma.config.ts가 별도로 존재하면 클라이언트 생성자에 반드시 옵션을 넘겨야 하는데, 동시에datasources는 쓸 수 없는 상황이 생긴다.
3단계 오류 —
datasourceUrldoes not exist in type그래서 Prisma 7 문서에서 찾은
datasourceUrl옵션을 써봤다:super({ datasourceUrl: process.env.DATABASE_URL, });TypeScript 컴파일 오류:
error TS2353: Object literal may only specify known properties, and 'datasourceUrl' does not exist in type 'Subset<PrismaClientOptions, PrismaClientOptions>'.as any로 우회했더니, 이번엔 런타임에서:PrismaClientConstructorValidationError: Unknown property datasourceUrl provided to PrismaClient constructor.즉,
prisma.config.ts가 존재하면 생성자에서 어떤 datasource 관련 옵션도 받지 않는다.
4단계 오류 — schema.prisma에서
url사용 불가전통적인 방식으로 돌아가려고
schema.prisma에 url을 추가했다:datasource db { provider = "postgresql" url = env("DATABASE_URL") }npx prisma generate를 실행하니:Error: P1012 The datasource property `url` is no longer supported in schema files.Prisma 7은 스키마 파일에서 url 설정을 완전히 금지했다.
5단계 오류 —
@prisma/client를 찾을 수 없음이제 Prisma 7의 새로운 방식인 드라이버 어댑터를 써야 한다는 걸 알았다.
previewFeatures = ["driverAdapters"]를 추가하고npx prisma generate를 실행했더니:Error: Could not resolve @prisma/client.프로젝트 구조가 모노레포처럼 되어 있어서 루트의
node_modules에 설치된prismaCLI가 실행되고 있었고, 정작smart-diet-backend안에는prismaCLI 자체가 없었다.# smart-diet-backend에 prisma CLI가 없음을 확인 ls ./node_modules/.bin/prisma # → No such file or directory
최종 해결 방법
1.
smart-diet-backend에 패키지 설치cd smart-diet-backend npm install prisma --save-dev npm install @prisma/adapter-pg pg npm install -D @types/pg포인트: 루트의
npx prisma generate가 계속 실패했던 이유가 바로 여기 있었다.smart-diet-backend안에prismaCLI 자체가 없었기 때문에./node_modules/.bin/prisma경로 자체가 존재하지 않았다.npm install prisma --save-dev로 로컬에 설치한 뒤, 아래처럼 직접 경로를 지정해서 실행하니 처음으로 성공했다:./node_modules/.bin/prisma generate이후에는
npx가 로컬node_modules를 우선 탐색하므로npx prisma generate로도 정상 동작한다.2.
schema.prisma— url 없이, driverAdapters 선언generator client { provider = "prisma-client-js" previewFeatures = ["driverAdapters"] } datasource db { provider = "postgresql" }3.
prisma.config.ts— CLI(migrate, generate)용 URL 설정import { defineConfig } from '@prisma/config'; import 'dotenv/config'; export default defineConfig({ datasource: { url: process.env.DATABASE_URL, }, });4.
prisma.service.ts— 드라이버 어댑터로 연결import { Injectable, OnModuleInit } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; import { PrismaPg } from '@prisma/adapter-pg'; import 'dotenv/config'; @Injectable() export class PrismaService extends PrismaClient implements OnModuleInit { constructor() { const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL }); super({ adapter }); } async onModuleInit() { await this.$connect(); } }5. 클라이언트 재생성 및 서버 실행
npx prisma generate npm run start:dev
핵심 정리 — Prisma 7의 변경점
항목 Prisma 6 이하 Prisma 7 생성자 URL 설정 datasources: { db: { url } }생성자에서 불가, 어댑터 사용 스키마 URL 설정 url = env("DATABASE_URL")지원 안 함 CLI URL 설정 스키마 파일 prisma.config.tsDB 연결 방식 내장 엔진 드라이버 어댑터 필수
교훈
- Prisma 7은 메이저 버전답게 breaking change가 크다. 마이그레이션 가이드를 먼저 읽자.
- 모노레포 구조에서는 패키지 위치에 주의. CLI가 어느
node_modules를 참조하는지 꼭 확인해야 한다. prisma.config.ts와schema.prisma의 역할이 분리됐다. 스키마는 모델 정의만, URL 설정은prisma.config.ts가 담당한다.
'프로젝트 > 개인프로젝트' 카테고리의 다른 글
Meal API Troubleshooting(API 보안 강화) (0) 2026.03.04 [NestJS/Prisma] 식단 관리 서비스 백엔드 고도화 및 트러블슈팅 기록 (0) 2026.03.04 [NestJS] Prisma 7과 JWT로 철벽 보안 로그인 구현하기 (feat. 드라이버 어댑터의 늪) (0) 2026.03.02 02. [NestJS] Smart Diet Agent 개발기 #1: Prisma 7 & PostgreSQL로 회원가입 API 구현 및 환경 설정 트러블슈팅 (0) 2026.02.26 01. 맥북 Node.js 개발 환경 준비 (5) 2026.02.23