Prisma는 Node.js와 TypeScript 환경에서 사용하는 차세대 ORM(Object-Relational Mapper)으로, 데이터베이스 작업을 획기적으로 간단하게 만들어줍니다.
ORM(Object-Relational Mapper)이란?
ORM이란 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 변환을 자동화해주는 기술입니다.
쉽게 말하면,
- 개발자가 직접 복잡한 SQL 쿼리를 작성하지 않고
- 자바스크립트, 타입스크립트 같은 언어의 코드만으로 데이터베이스 작업을 할 수 있도록 도와주는 기술입니다.
ORM이 없을 때, 사용자 정보를 가져오기 위해서는 아래와 같이 작성해야 합니다.
// 직접 SQL 쿼리를 작성해야 함
const result = await db.query('SELECT * FROM users WHERE id = ?', [1]);
// 결과를 직접 변환해야 함
const user = {
id: result[0].id,
email: result[0].email,
};
ORM이 있을 때 (예: Prisma), 사용자 정보를 가져오기 위해서 아래와 같이 하면 됩니다.
// SQL 없이 직관적으로 데이터를 가져올 수 있음
const user = await prisma.user.findUnique({
where: { id: 1 }
});
Prisma의 핵심 개념
Prisma Schema
Prisma의 모든 것은 schema.prisma 파일에서 시작됩니다. 이 파일은 데이터베이스 모델과 관계를 정의하는 역할을 합니다.
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
authorId Int
author User @relation(fields: [authorId], references: [id])
}
Prisma Client
Prisma Client는 위 스키마를 기반으로 자동 생성된 DB 클라이언트로, 직관적인 API를 제공합니다.
// Prisma Client로 데이터 가져오기
const users = await prisma.user.findMany({
where: { email: { contains: '@gmail.com' } },
});
Prisma Migrate
데이터베이스 스키마를 변경할 때마다 수동으로 SQL을 작성하는 번거로움에서 벗어날 수 있도록 Prisma는 자동 마이그레이션 기능을 제공합니다.
npx prisma migrate dev
이 명령어를 통해 Prisma가 자동으로 변경된 내용을 반영한 SQL 마이그레이션을 생성하고 데이터베이스를 업데이트해줍니다.