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;
#prisma란#prisma 사용하는 이유#prisma 가이드라인#prisma 사용법#prisma DB#prisma 명령어#npm