Prisma
Prisma는 TypeScript 기반 ORM(Object Relational Mapping) 도구예요.
SQL을 직접 쓸 필요 없이 타입 안정성 있는 DB 코드를 쉽게 작성할 수 있습니다.
- generate: Prisma Client 생성
- db push: Prisma 스키마를 실제 DB에 반영 (테이블 자동 생성)
- migrate: 버전 관리되는 마이그레이션 파일 생성
초기 설정
프로젝트 루트에서 Prisma 설치부터 시작합니다
npm install prisma --save-dev
npm install @prisma/client
Prisma 초기화
npx prisma init
- 이 명령어를 실행하면 프로젝트 루트에 다음 폴더/파일이 생깁니다.
prisma/
└── schema.prisma
.env
schema.prisma 기본 구조
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
데이터베이스 연결 (Neon, Supabase, PlanetScale 등)
만약 Neon(PostgreSQL)을 사용한다면
Neon에서 생성된 연결 URL을 .env에 추가하세요.
보통 처음 가이드에 URL 주소를 복사할 수 있습니다.
DATABASE_URL="postgresql://neondb_owner:password@ep-sample-pooler.ap-southeast-1.aws.neon.tech/neondb"
스키마 작성하기
prisma/schema.prisma 안에서 모델(테이블)을 정의합니다.
예시: User 테이블
model User {
id Int @id @default(autoincrement())
name String
email String @unique
createdAt DateTime @default(now())
}
Prisma Client 생성하기 (npx prisma generate)
이 명령어를 실행하면 node_modules/@prisma/client 경로에 Prisma 클라이언트가 생성됩니다.
npx prisma generate
출력 예시
✔ Generated Prisma Client (5.2.0 | library) to ./node_modules/@prisma/client in 70ms
이제 코드에서 바로 사용할 수 있습니다
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
const users = await prisma.user.findMany();
console.log(users);
}
main();
DB에 실제 반영하기 (npx prisma db push)
이제 작성한 스키마를 실제 DB에 반영해보세요.
npx prisma db push
출력 예시
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database "neondb", schema "public" at "ep-sample-pooler.ap-southeast-1.aws.neon.tech:5432"
✔ Your database is now in sync with your schema. The Prisma Client has been generated and saved at node_modules/@prisma/client.
- 이제 Neon 대시보드에서 테이블이 실제로 생성된 것을 확인할 수 있습니다.
generate / db push / migrate 차이 요약
| 명령어 | 역할 | 비고 |
| npx prisma generate | Prisma Client 생성 | 모델 수정 후 항상 실행 |
| npx prisma db push | 스키마 → DB 반영 | 개발용, 빠른 반영 |
| npx prisma migrate dev | 마이그레이션 파일 생성 + 반영 | 배포 환경에서 추천 |
Next.js에서 Prisma Singleton 설정 (옵션)
Next.js 13~15에서는 서버 실행마다 PrismaClient가 여러 번 생성되는 걸 방지해야 합니다.
// lib/prisma.ts
import { PrismaClient } from '@prisma/client';
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
export const prisma =
globalForPrisma.prisma ||
new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
});
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
이제 프로젝트 어느 개별 파일에서든 다음처럼 사용 가능합니다
import { prisma } from '@/lib/prisma';
export async function getUsers() {
return await prisma.user.findMany();
}
'개발 공부' 카테고리의 다른 글
| shadcn/ui (1) (0) | 2025.11.16 |
|---|---|
| Prisma CRUD 예시 (0) | 2025.11.12 |
| Prisma 관계(Relation) (0) | 2025.11.02 |
| Prisma 스키마 (2) - 인덱스, 유니크, 복합키 (0) | 2025.11.01 |
| Prisma 스키마 (1) (0) | 2025.10.31 |