[Prisma]의 기본적인 사용법

C__W.A·2025년 1월 27일

NextJS

목록 보기
3/4
post-thumbnail

Prisma는 TypeScript와 Node.js에서 데이터베이스와의 상호작용을 간소화하기 위해 설계된 ORM(Object-Relational Mapping) 도구입니다. 간단하고 효율적인 데이터베이스 접근을 가능하게 하며, 다양한 데이터베이스와 호환됩니다. Prisma는 특히 Schema-first 개발 방식과 강력한 타입 지원으로 유명합니다.

📌Prisma의 주요 특징

🟢 Schema-First Approach
Prisma는 자체적인 스키마 파일(schema.prisma)로 데이터베이스 모델을 정의합니다. 이 스키마 파일을 기반으로 Prisma가 데이터베이스와 코드를 동기화합니다.

🟢 타입 안전성 (Type-Safe)
Prisma는 TypeScript와 통합되어 강력한 타입 안전성을 제공합니다. 컴파일 단계에서 데이터베이스 쿼리에 대한 오류를 미리 확인할 수 있어 버그를 줄일 수 있습니다.

🟢 자동 코드 생성
Prisma Client는 데이터베이스 스키마에 따라 자동으로 생성되며, 이를 통해 편리한 CRUD 작업이 가능합니다.

🟢 Migration 시스템 지원
Prisma Migrate를 사용하면 데이터베이스 스키마를 쉽게 버전 관리하고, 변경 사항을 추적할 수 있습니다.

🟢 다중 데이터베이스 지원
PostgreSQL, MySQL, SQLite, MongoDB, SQL Server 등 다양한 데이터베이스를 지원합니다.

🟢 관계형 데이터베이스 모델링 지원
Prisma는 1:N, N:M 같은 복잡한 관계도 간단하게 모델링하고 쿼리할 수 있습니다.

📌 Prisma의 장점

🟢 생산성 향상
Prisma Client를 통해 데이터베이스 쿼리를 작성하는 속도가 빠르고 직관적입니다.

🟢 자동완성 지원
IDE에서 Prisma Client를 사용할 때 강력한 자동완성을 제공합니다.

🟢 마이그레이션 간소화
Prisma Migrate로 데이터베이스 스키마 변경 작업이 간단해집니다.

🟢 학습 곡선이 낮음
Prisma Schema 문법이 간단하여 초보자도 쉽게 학습할 수 있습니다.

🟢 데이터베이스 테스트 용이
테스트 데이터 생성을 위한 툴(예: Prisma Seed)이 내장되어 있습니다.

📌 Prisma의 단점

🟢 특정 쿼리 한계
ORM의 특성상 복잡한 SQL 쿼리 작성이 제한적일 수 있으며, 이 경우 Raw Query를 사용해야 합니다.

🟢 추가 추상화 계층
Prisma는 데이터베이스 위에 추가 계층을 제공하기 때문에, 직접 SQL을 사용하는 것보다 성능이 약간 떨어질 수 있습니다.

🟢 관계형 데이터베이스에 최적화:
MongoDB와 같은 비관계형 데이터베이스 지원이 상대적으로 미흡할 수 있습니다.

📌 Prisma 설치 및 기본 설정

  1. Prisma 설치
npm install prisma --save-dev
npx prisma init
  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())
  name  String
  email String @unique
  posts Post[]
}

model Post {
  id      Int    @id @default(autoincrement())
  title   String
  content String
  userId  Int
  user    User   @relation(fields: [userId], references: [id])
}
  1. Prisma Client 생성
npx prisma generate

📌 CRUD 코드 예시

🧑‍💻 데이터베이스 연결

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

export default prisma;

🧑‍💻 데이터 생성 (Create)

const createUser = async () => {
  const user = await prisma.user.create({
    data: {
      name: 'John Doe',
      email: 'johndoe@example.com',
      posts: {
        create: {
          title: 'My First Post',
          content: 'This is the content of the first post',
        },
      },
    },
  });
  console.log(user);
};

🧑‍💻 데이터 읽기 (Read)

const getUsers = async () => {
  const users = await prisma.user.findMany({
    include: { posts: true },
  });
  console.log(users);
};

🧑‍💻 데이터 업데이트 (Update)

const updateUser = async (id) => {
  const updatedUser = await prisma.user.update({
    where: { id },
    data: { name: 'Updated Name' },
  });
  console.log(updatedUser);
};

🧑‍💻 데이터 삭제 (Delete)

const deleteUser = async (id) => {
  const deletedUser = await prisma.user.delete({
    where: { id },
  });
  console.log(deletedUser);
};

📌 Prisma를 사용할 때 주의할 점

스키마 동기화 주의
Prisma 스키마를 수정한 후에는 항상 npx prisma migrate와 npx prisma generate를 통해 데이터베이스와 클라이언트를 동기화해야 합니다.

profile
기술은 문제를 해결하기 위해 존재한다

0개의 댓글