여러분의 Next.js 프로젝트에 database 및 ORM 설정을 어디까지 해보셨나요? 오늘 글에서는 supabase와 prisma를 기반으로 매끄럽게 postgresql과 연동하는 방법을 설명드리겠습니다. 쉽게 따라할 수 있도록 예제 코드를 통해 한 단계씩 설명드릴 테니 놓치지 마세요!
먼저 Supabase와 Prisma에 대해서 간단히 알아볼까요?
Supabase 프로젝트를 생성하면 'NEXT_PUBLIC_SUPABASE_URL'과 'NEXT_PUBLIC_SUPABASE_ANON_KEY' 두 가지 키를 발급받습니다. 이를 .env 파일에 추가합니다.
.env
NEXT_PUBLIC_SUPABASE_URL="https://your-supabase-url.supabase.co" NEXT_PUBLIC_SUPABASE_ANON_KEY="your-supabase-anon-key" SUPABASE_URL="https://your-supabase-url.supabase.co" SUPABASE_KEY="your-supabase-service-role-key" POSTGRES_POOLING_URL="your-pooling-url" POSTGRES_DIRECT_URL="your-direct-url"
프로젝트 폴더에서 Prisma와 클라이언트 패키지를 설치합니다.
npm install @prisma/client prisma
설치가 끝나면, 프로젝트 루트에 schema.prisma 파일을 생성합니다. Prisma의 schema는 모델과 데이터베이스 구성을 정의하며, 설정이 완료된 이후 prisma CLI를 사용하여 마이그레이션을 수행할 수 있습니다.
schema.prisma
prisma
generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("POSTGRES_POOLING_URL") directUrl = env("POSTGRES_DIRECT_URL") } model User { id String @id @default(cuid()) email String @unique name String authority String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt carPrices CarPrice[] } model Car { id String @id @default(cuid()) name String brand String model String year Int price Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt carPrices CarPrice[] } model CarPrice { id String @id @default(cuid()) meter String term String advancePayment Int totalPrice Int price Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt userId String? user User? @relation(fields: [userId], references: [id]) carId String car Car @relation(fields: [carId], references: [id]) }
여기서 carPrice 모델은 user와 car에 연관관계를 설정했습니다. carId와 userId는 각각 Car와 User 모델의 기본 키입니다.
carPrice
user
car
carId
userId
Car
User
Prisma 마이그레이션을 설정하여 데이터베이스에 변경사항을 반영합니다.
npx prisma migrate dev --name init
이 명령어를 실행하면 Prisma가 스키마를 SQL로 변환하여 데이터베이스에 실행해줍니다. 이를 통해 User, Car, CarPrice 테이블이 생성됩니다.
CarPrice
마지막으로, Prisma 클라이언트를 설정하여 쉽게 데이터베이스와 상호작용할 수 있도록 합니다.
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // Example usage async function main() { const newUser = await prisma.user.create({ data: { email: 'alice@prisma.io', name: 'Alice', authority: 'admin', }, }); console.log('Created new user:', newUser); } main() .catch(e => { throw e; }) .finally(async () => { await prisma.$disconnect(); });
이제 다음과 같은 코드를 통해 쉽게 데이터를 삽입할 수 있습니다.
여기까지 따라오셨다면, supabase와 prisma를 활용한 postgresql 설정을 성공적으로 마치신 겁니다! 이렇게 설정된 ORM 환경은 데이터베이스와의 상호작용을 매끄럽게 만들어 줄 뿐 아니라, 타입 안전성 및 코드 자동 생성 측면에서도 많은 이점을 제공합니다.
여러분의 프로젝트에서 더 강력한 백엔드를 구축하는 데 이 글이 도움이 되기를 바랍니다. 다른 질문이나 추가적으로 궁금한 점이 있다면, 언제든지 댓글로 남겨주세요!