Prisma | Simplify working and interacting with databases

Prisma와 Next.js 15 설정하기

Prisma는 Node.js와 TypeScript를 위한 차세대 ORM(Object-Relational Mapping)입니다. 다음은 Next.js 15 프로젝트에서 Prisma를 설정하고 사용하는 방법을 단계별로 설명합니다.

https://www.youtube.com/watch?v=rLRIB6AF2Dg

0. PostgreSQL 준비

version: '3.8'
services:
  db:
    image: postgres:15
    container_name: test-db
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: testtest
      POSTGRES_DB: testdb
    volumes:
      - test_db_data:/var/lib/postgresql/data

volumes:
  test_db_data:

1. 데이터베이스 스키마 정의

prisma/schema.prisma 파일에서 데이터베이스 모델을 정의합니다:

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id        Int      @id @default(autoincrement())
  email     String   @unique
  name      String?
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  Int
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}

prisma generate

2. Prisma Client 설정

lib/prisma.ts 파일을 생성하여 Prisma Client를 설정합니다:

import { PrismaClient } from '@prisma/client'

const globalForPrisma = global as unknown as { prisma: PrismaClient }

export const prisma = globalForPrisma.prisma || new PrismaClient()

if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma

3. 기본 CRUD 작업

생성 (Create)

const createUser = async () => {
  const user = await prisma.user.create({
    data: {
      email: '[email protected]',
      name: 'John Doe',
    },
  })
  return user
}

조회 (Read)