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