티스토리 뷰

반응형

 

✅ Prisma + MongoDB 통합 가이드 – NoSQL과 ORM의 만남

"NoSQL과 ORM, 타입 안전성과 스키마 유연성을 모두 잡는다!"
MongoDB와 Prisma를 함께 사용하여 데이터 모델링과 쿼리 작성을 간편하게 처리합니다.


🎯 Prisma와 MongoDB: 왜 이 조합이 좋은가?

💪 강력한 이유 3가지

  1. MongoDB의 유연성
    • 스키마가 없는 자유로운 데이터 구조 관리
  2. Prisma의 타입 안정성
    • 스키마를 명시적으로 정의하여 타입 안전성 확보
  3. 강력한 관계형 데이터 지원
    • 1:1, 1:N, N:M 관계를 Prisma로 관리 가능

📦 1. 프로젝트 세팅

💻 기본 설정

mkdir prisma-mongodb && cd prisma-mongodb
npm init -y
npm install @prisma/client
npm install prisma --save-dev
npm install mongodb

🗃 MongoDB 설정

MongoDB 클러스터 만들기:

mongosh
use mydb

🌐 MongoDB Atlas 연결 예시

반응형

.env 파일 설정:

DATABASE_URL="mongodb+srv://<username>:<password>@cluster0.mongodb.net/mydb?retryWrites=true&w=majority"

📐 2. Prisma 초기 설정

npx prisma init

prisma/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
  name    String
  email   String @unique
  age     Int
  profile Profile?
}

model Profile {
  id     String @id @default(auto()) @map("_id") @db.ObjectId
  bio    String
  userId String @unique @db.ObjectId
  user   User   @relation(fields: [userId], references: [id])
}

🚀 3. Prisma Client 생성

npx prisma generate

⚠️ 주의: MongoDB는 마이그레이션을 지원하지 않습니다.
모델을 직접 수정하고 클라이언트를 다시 생성해야 합니다.


🛠 4. Prisma Client 사용법

src/prisma.ts:

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()
export default prisma

📥 데이터 삽입 (Create)

const newUser = await prisma.user.create({
  data: {
    name: '훈창',
    email: 'hoon@example.com',
    age: 28,
    profile: {
      create: {
        bio: '풀스택 개발자',
      },
    },
  },
})
console.log('New User:', newUser)

📋 데이터 조회 (Read)

전체 조회

const users = await prisma.user.findMany()
console.log('Users:', users)

조건 조회

const user = await prisma.user.findUnique({
  where: {
    email: 'hoon@example.com',
  },
})
console.log('User:', user)

📝 데이터 수정 (Update)

const updatedUser = await prisma.user.update({
  where: { email: 'hoon@example.com' },
  data: { age: 29 },
})
console.log('Updated User:', updatedUser)

🗑 데이터 삭제 (Delete)

await prisma.user.delete({
  where: { email: 'hoon@example.com' },
})

🌐 5. MongoDB에서 Prisma로 관계형 데이터 처리

✅ 1:1 관계

model Profile {
  id     String @id @default(auto()) @map("_id") @db.ObjectId
  bio    String
  userId String @unique @db.ObjectId
  user   User   @relation(fields: [userId], references: [id])
}

✅ 1:N 관계

model User {
  id    String  @id @default(auto()) @map("_id") @db.ObjectId
  name  String
  posts Post[]
}

model Post {
  id     String @id @default(auto()) @map("_id") @db.ObjectId
  title  String
  userId String @db.ObjectId
  user   User   @relation(fields: [userId], references: [id])
}

🌟 MongoDB 고유 기능 활용

📂 ObjectId 타입 사용

MongoDB의 ID는 기본적으로 ObjectId 타입입니다.
Prisma에서 이를 지원하기 위해 @db.ObjectId 속성을 사용합니다.

id String @id @default(auto()) @map("_id") @db.ObjectId

💡 중첩 문서(JSON) 저장

Prisma는 MongoDB의 Json 타입도 지원합니다:

model Product {
  id      String @id @default(auto()) @map("_id") @db.ObjectId
  name    String
  details Json
}

🧠 실무 팁: MongoDB에서 유용한 Prisma 기능

기능 코드

중첩 데이터 추가 create({ data: { details: { color: "red" } } })
필드 타입 변경 @db.ObjectId로 MongoDB와 호환
관계형 쿼리 include: { profile: true }
데이터 중복 제거 @unique로 이메일 중복 방지

✅ Prisma와 MongoDB의 완벽 조합

Prisma의 장점 MongoDB의 장점

타입 안전성 스키마 없는 자유로움
자동완성 유연한 데이터 구조
Rust 기반 성능 대용량 처리에 강함
관계형 데이터 관리 중첩 문서 지원

 

Prisma MongoDB 연동,Prisma MongoDB 설정,Node.js Prisma MongoDB,Prisma Client 사용법,타입 안전 MongoDB ORM,Prisma 관계형 데이터 MongoDB,Prisma ObjectId 사용법,MongoDB Prisma CRUD,Prisma로 MongoDB 관리,NoSQL Prisma 통합

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
반응형