blog
Prisma + MongoDB 세팅 가이드
Front-end / Database#Prisma#MongoDB#Next.js#ORM
Prisma 6 기준으로 작성했다. 메이저 버전에 따라 generator 이름과 지원 DB가 달라질 수 있으니, 설치 전에 사용하는 버전의 MongoDB 지원 여부를 공식 문서에서 확인한다.
1. 설치와 초기화
npm install -D prisma
npm install @prisma/client
npx prisma init
prisma/schema.prisma와 .env가 생성된다.
2. 연결 정보
# .env
DATABASE_URL="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>?retryWrites=true&w=majority"
MongoDB Atlas라면 클러스터의 연결 URI를 그대로 붙여 넣는다. Prisma는 MongoDB에서 replica set을 요구한다(중첩 쓰기 등에 트랜잭션을 쓰기 때문). Atlas는 기본이 replica set이지만, 로컬 단일 인스턴스 MongoDB에서는 에러가 날 수 있다.
.env는 반드시 .gitignore에 포함한다.
3. schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
hashedPassword String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
MongoDB의 기본 키는 _id 필드의 ObjectId이므로, id 필드에 @map("_id")와 @db.ObjectId를 붙여 매핑한다.
4. 스키마 반영
npx prisma db push
MongoDB는 스키마 없는 DB라 prisma migrate를 지원하지 않는다. db push가 인덱스(@unique 등)를 반영한다. Prisma 6까지는 db push 후 클라이언트가 자동 생성되지만, 버전에 따라 생성되지 않을 수 있으니 필요하면 직접 실행한다.
npx prisma generate
5. 클라이언트 싱글턴 (Next.js)
개발 모드의 HMR로 모듈이 다시 평가될 때마다 PrismaClient가 새로 만들어지면 연결이 계속 늘어난다. globalThis에 하나만 보관한다.
// lib/prisma.ts
import { PrismaClient } from '@prisma/client';
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
export const prisma = globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== 'production') {
globalForPrisma.prisma = prisma;
}
import { prisma } from '@/lib/prisma';
const users = await prisma.user.findMany();
자주 쓰는 명령어
| 상황 | 명령어 |
|---|---|
| 모델 수정 후 DB 반영 | npx prisma db push |
| Prisma Client 다시 생성 | npx prisma generate |
| 브라우저 GUI로 데이터 확인·수정 | npx prisma studio |