Prisma + MongoDB 스키마 작성 개념

정혅·2026년 1월 15일

공부

목록 보기
11/11

1) model - 컬렉션 정의 시작점

model Admin {
  id    String @id
  email String
}
  • model 하나 = MongoDB의 컬렉션 하나

  • Admin → admin 컬렉션이 되는 것

  • 안에는 "문서의 필드 구조" 정의


2) 필드 기본 문법: 이름 타입 속성

구조는 항상 아래 순서

email String
필드명   타입    @속성  @속성
Prisma 타입MongoDB 대응설명
Stringstring문자열
Intint정수
Booleanbooltrue / false
DateTimedate날짜
Floatdouble실수
Jsonobject자유 구조 JSON

3) MongoDB 전용 ID 필드 문법

id String @id @default(auto()) @map("_id") @db.ObjectId
  • String → Prisma에서는 ObjectId를 String으로 다룸
  • @id → primary key
  • @default(auto()) → MongoDB가 ObjectId 자동 생성
  • @map("_id") → Prisma의 id ↔ MongoDB의 _id 매핑
  • @db.ObjectId → 실제 DB 타입이 ObjectId임을 명시

MongoDB + Prisma에서 ID 필드는 거의 항상 이 패턴


4) Optional 필드

name String?
  • ? = 없어도 되는 필드
  • MongoDB 문서에 필드 자체가 없어도 됨
lastLoginAt DateTime?

→ 아직 로그인 안 한 관리자도 저장 가능


5) 기본값 @default()

status String @default("ACTIVE")
loginFailCount Int @default(0)
createdAt DateTime @default(now())
  • insert 시 값이 없으면 자동으로 채워짐
  • MongoDB에 실제 값이 저장

6) 자동 갱신 필드 @updatedAt

updatedAt DateTime @updatedAt
  • Prisma Client로 update가 발생할 때
  • 자동으로 현재 시간으로 변경
  • 관리자/감사 로그에서 매우 자주 사용

7) enum - 값 제한

enum AdminRole {
  SUPER_ADMIN
  ADMIN
  CS
}

### 

role AdminRole
  • 문자열이지만 허용된 값만 가능
  • "admin", "Admin" 같은 오타 방지
  • 관리자 권한, 상태 값에 필수
enum AdminStatus {
  ACTIVE
  SUSPENDED
  DELETED
}

8) Unique & Index

유니크 제약

email String @unique
  • 같은 email 중복 저장 불가
  • MongoDB에 unique index 생성됨

일반 인덱스

@@index([role])
@@index([status])
  • 조회 성능 최적화용
  • 관리자 목록, 필터링 시 필수

9) 배열 타입 (권한 확장 시 사용)

permissions String[]
  • MongoDB 배열로 저장됨
  • role 대신 세밀한 권한 모델을 만들 때 사용
"permissions": ["notice:write", "user:read"]

10) 관계(Relation) - 관리자 생성자 추적 같은 경우

createdById String? @db.ObjectId
createdBy   Admin?  @relation("AdminCreatedBy", fields: [createdById], references: [id])
  • MongoDB에서도 Prisma는 관계 개념을 제공
  • 실제로는 ObjectId를 저장하지만
  • Prisma Client에서 join처럼 다룰 수 있음

0개의 댓글