
Prisma를 사용할 때 기본적으로 다루게 되는 파일은 다음 세 가지입니다:
.envprisma.tsschema.prisma각 파일이 어떤 역할을 하는지에대해 알아보겠습니다.
.env – 환경 변수 설정 파일.env 파일은 데이터베이스 접속 정보와 같은 민감한 환경 변수를 저장하는 파일입니다. schema.prisma에서는 이 파일을 참조해 DATABASE_URL과 같은 값을 가져옵니다.
# Supabase 연결 (Connection Pooling)
DATABASE_URL="postgresql://postgres.********:********@aws-0-ap-northeast-2.pooler.supabase.com:6543/postgres?pgbouncer=true"
# 마이그레이션 등 직접 연결용
DIRECT_URL="postgresql://postgres.********:********@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres"
⚠️ 주의:
.env는 절대 Git에 커밋되면 안 됩니다.
.gitignore에 반드시 포함해야 합니다.
이 파일은 Prisma Client를 싱글톤으로 생성하고, 이를 애플리케이션 어디에서든 사용할 수 있도록 내보내는 역할을 합니다.
// src/lib/prisma.ts
import { PrismaClient } from "@prisma/client";
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const prisma =
globalForPrisma.prisma ?? new PrismaClient();
if (process.env.NODE_ENV !== "production") {
globalForPrisma.prisma = prisma;
}
✅ 주요 포인트
production은 일반적으로 핫 리로딩이 없고, 서버도 한 번 실행되면 계속 유지되기 때문입니다.
그래서 굳이 싱글톤을 만들지 않아도 인스턴스가 하나만 생성되고 안정적으로 유지됩니다.
⚡ Next.js와 핫 리로딩 (Hot Reloading)
Next.js 개발 환경에서는 코드가 저장되면 자동으로 리프레시 됩니다.
이걸 핫 리로딩(Hot Reloading)이라고 하는데 이때 전체 앱(서버 프로세스)이 다시 실행되기 때문에, new PrismaClient()가 매번 호출될 수 있어요.
→ 이러면 개발 중에 DB 연결 수가 폭발적으로 증가할 수 있습니다.
이 파일은 Prisma의 핵심 설정 파일로, 다음 내용을 정의합니다:
User, Post 등)generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
model User {
id Int @id(map: "user_pkey") @default(autoincrement())
password String
userId String @unique(map: "user_userId_key")
name String
}
✅ 주요 포인트
schema.prisma: ✅ 반드시 있어야 합니다. 데이터 모델, DB 연결 정보를 정의하기 때문입니다..env: 🔺 Prisma 설정(DATABASE_URL)을 .ev로 분리해서 관리하는게 일반적이지만, 직접 schema.prisma안에 넣는것도 가능합니다. 다만 보안과 유지보수 측면에서 .env 사용이 권장됩니다.prisma.ts: ❌ 필수는 아닙니다. 프로젝트에서 Prisma Client를 직접 import해서 쓰는 것도 가능하지만, lib/prisma.ts 처럼 싱글톤 패턴으로 만들어 중복 인스턴스 생성 방지를 위해 사용됩니다.// 잘못된 예
const prisma = new PrismaClient(); // 페이지 리로드나 API 호출마다 새로 생성됨
// globalThis를 활용해서 중복 생성을 방지
if (!globalThis.prisma) {
globalThis.prisma = new PrismaClient();
}
| 파일명 | 역할 설명 |
|---|---|
.env | DB 접속 정보 등 민감한 환경 변수 저장 |
lib/prisma.ts | Prisma Client를 싱글톤으로 생성, 전역에서 사용 가능 |
schema.prisma | DB 스키마 정의 및 설정 파일 |