prisma란prisma 사용하는 이유prisma 가이드라인prisma 사용법prisma DB

Prisma란 무엇인가? (간단한 예시 포함)

KUKJIN LEE
KUKJIN LEE
2024년 8월 20일
168

Prisma를 사용하면 직접 쿼리를 작성할 필요 없이, Prisma Client를 통해 데이터베이스 작업을 수행할 수 있습니다. Prisma Client는 타입 안전성과 자동 완성 기능을 제공하여 코드 작성과 유지 보수를 크게 개선해 줍니다.

 

Prisma의 주요 장점

  • 타입 안전성: 데이터베이스 모델에 기반한 타입 안전성을 보장합니다. 이는 런타임 오류를 줄이고 코드를 더 신뢰성 있게 만듭니다.

  • 자동 완성: 데이터베이스 스키마에 맞춰 자동 생성된 쿼리 메서드를 제공하므로, IDE에서 자동 완성 기능을 사용할 수 있습니다.

  • 생산성 향상: 모델 정의, 마이그레이션, 쿼리 작성 등이 간소화되어 개발자의 생산성을 크게 향상시킵니다.

 

1. Prisma Client 설정

먼저 Prisma Client를 설치하고 설정합니다.

npm install @prisma/client
npx prisma generate

 

2. 모델 정의

schema.prisma 파일에서 모델을 정의합니다.

// 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
}

 

3. Prisma Client 사용 예제

Next.js 14의 app directory 구조를 사용하여 기본적인 CRUD 작업을 수행하는 예제를 살펴보겠습니다.

사용자 생성

// app/api/users/create/route.js

import prisma from '../../../lib/prisma';

export async function POST(req) {
  const { name, email } = await req.json();

  try {
    const user = await prisma.user.create({
      data: {
        name,
        email,
      },
    });
    return new Response(JSON.stringify(user), { status: 201 });
  } catch (error) {
    console.error(error);
    return new Response(JSON.stringify({ error: 'Internal Server Error' }), { status: 500 });
  }
}

 

사용자 조회

// app/api/users/[id]/route.js

import prisma from '../../../lib/prisma';

export async function GET(req) {
  const { id } = req.params;

  try {
    const user = await prisma.user.findUnique({
      where: { id: parseInt(id) },
    });

    if (!user) {
      return new Response(JSON.stringify({ error: 'User not found' }), { status: 404 });
    }

    return new Response(JSON.stringify(user), { status: 200 });
  } catch (error) {
    console.error(error);
    return new Response(JSON.stringify({ error: 'Internal Server Error' }), { status: 500 });
  }
}

 

사용자 업데이트

// app/api/users/[id]/route.js

import prisma from '../../../lib/prisma';

export async function PUT(req) {
  const { id } = req.params;
  const { name, email } = await req.json();

  try {
    const user = await prisma.user.update({
      where: { id: parseInt(id) },
      data: {
        name,
        email,
      },
    });

    return new Response(JSON.stringify(user), { status: 200 });
  } catch (error) {
    console.error(error);
    return new Response(JSON.stringify({ error: 'Internal Server Error' }), { status: 500 });
  }
}

 

사용자 삭제

// app/api/users/[id]/route.js

import prisma from '../../../lib/prisma';

export async function DELETE(req) {
  const { id } = req.params;

  try {
    await prisma.user.delete({
      where: { id: parseInt(id) },
    });

    return new Response(null, { status: 204 });
  } catch (error) {
    console.error(error);
    return new Response(JSON.stringify({ error: 'Internal Server Error' }), { status: 500 });
  }
}

 

4. Prisma Client

위 예제들에서 사용된 prisma 인스턴스를 초기화하는 파일을 생성합니다.

// lib/prisma.js

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

const prisma = new PrismaClient();

export default prisma;

관련 글

axios 사용자라면 반드시 읽어야 할 긴급 경고

이번에 정말 충격적인 사건이 터졌습니다. 전 세계에서 가장 많이 쓰이는 HTTP 클라이언트 라이브러리 axios가 npm 공급망 공격을 당했습니다. 이번 공격은 단순한 버그가 아니라, maintainer 계정을 해킹해 악성 버전을 직접 배포한 전형적인 Supply ...

2026년 4월 2일12

Next.js 언어 번역 라이브러리 선택 가이드

웹 서비스 글로벌 진출이 보편화되면서, 국제화(i18n) 관련 라이브러리가 많이 출시됐습니다. 많이 사용되고, 커뮤니티에서 평가가 좋은 언어 번역 라이브러리를 정리했습니다. 인기 번역 라이브러리 1. react-i18next 설명 : React 프로젝트에서 가장 널리 ...

2025년 7월 1일270

가볍고 유연한 React 아이콘 라이브러리 lucide-react

lucide-react 는 React 애플리케이션에서 SVG 아이콘을 손쉽게 사용할 수 있도록 지원하는 라이브러리 입니다. 인기 있는 Feather 아이콘을 기반으로 제작되었으며, 1000개 이상의 일관성 있는 디자인의 아이콘을 제공합니다. 또한 실제 프로젝트에서 사용...

2025년 6월 16일226

Java 이미지 최적화 라이브러리 Thumbnailator

Thumbnailator 소개 Thumbnailator는 Java 기반의 간편하고 강력한 이미지 처리 라이브러리로, 특히 이미지 리사이징 및 썸네일 제작에 최적화되어 있습니다. 직관적인 API로 빠른 개발이 가능하며, 다양한 이미지 형식을 지원합니다. 주요 특징 간결하...

2025년 6월 11일221