ORM (Object-Relational Mapping)
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어에서 관계형 데이터베이스를 사용할 때, 데이터베이스의 테이블과 객체(클래스) 간의 매핑을 자동으로 처리해 주는 기법 또는 도구입니다. ORM을 사용하면 SQL을 직접 작성하지 않고도, 데이터베이스의 데이터를 객체와 연결하여 쉽게 처리할 수 있습니다.
코드의 일관성: ORM을 사용하면 데이터베이스 작업이 객체 지향적으로 처리되어 코드의 일관성과 가독성이 높아집니다.
유지보수 용이성: SQL 쿼리를 직접 작성하지 않고, 객체 단위로 데이터를 다루기 때문에 유지보수가 용이해집니다.
데이터베이스 독립성: 하나의 ORM 도구로 여러 데이터베이스를 쉽게 전환할 수 있습니다.
복잡한 쿼리: ORM은 복잡한 SQL 쿼리를 생성하는 데 제한적일 수 있으며, 성능 최적화가 필요한 경우 직접 SQL 쿼리를 작성하는 것이 더 효율적일 때도 있습니다.
성능 저하: 대규모 데이터베이스나 복잡한 데이터 조작이 필요한 경우 ORM이 생성하는 쿼리가 비효율적일 수 있습니다.
Prisma는 Node.js와 TypeScript 환경에서 사용하는 최신 ORM 도구입니다. Prisma는 데이터베이스와 상호작용을 단순화하고, 타입 안전성을 제공하며, 데이터베이스 작업을 더욱 직관적으로 처리할 수 있게 돕습니다. 특히 Prisma는 기존의 ORM보다 더 직관적이고 현대적인 API를 제공하는 것이 특징입니다.
Prisma Client: 데이터베이스와 상호작용하는 고수준의 API를 제공하는 ORM입니다. Prisma Client는 각 테이블에 대해 타입 안전한 메서드를 생성하며, 이를 통해 SQL 쿼리 없이 데이터베이스 작업을 할 수 있습니다.
Prisma Migrate: 데이터베이스 스키마를 관리하고 마이그레이션을 간편하게 수행할 수 있도록 도와주는 도구입니다. Prisma Migrate를 사용하면 스키마의 변경 사항을 쉽게 데이터베이스에 적용할 수 있습니다.
Prisma Studio: 웹 기반의 데이터베이스 GUI(그래픽 사용자 인터페이스)입니다. 이를 통해 데이터베이스의 테이블과 데이터를 시각적으로 관리할 수 있습니다.
타입 안전성: Prisma는 TypeScript를 기반으로 하여 데이터베이스 작업 시 높은 타입 안전성을 보장합니다. 이는 데이터베이스 작업 중 실수를 줄이고, 개발자 경험을 향상시킵니다.
자동 완성 지원: Prisma Client는 TypeScript의 강력한 자동 완성 기능을 제공하여, 데이터베이스 작업 시 코드 작성 속도를 높이고 오류를 줄일 수 있습니다.
1.Prisma Schema
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
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String
userId Int
user User @relation(fields: [userId], references: [id])
}
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function main() {
// 새로운 사용자 생성
const newUser = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@example.com',
},
});
// 모든 사용자 조회
const allUsers = await prisma.user.findMany();
console.log(allUsers);
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});
npx prisma migrate dev --name "init"
npx prisma studio
타입 안전성: Prisma는 TypeScript의 타입 시스템과 깊이 통합되어 있어 데이터베이스 작업 시 타입 오류를 줄이고 더 안전한 코드를 작성할 수 있습니다.
직관적인 API: Prisma Client는 직관적이고 간결한 API를 제공하여 데이터베이스 작업을 빠르고 쉽게 처리할 수 있습니다.
자동화된 마이그레이션: Prisma Migrate는 데이터베이스 마이그레이션을 자동화하여, 개발자가 데이터베이스 스키마를 관리하는 데 걸리는 시간을 줄입니다.
개발자 친화적: Prisma는 자동 완성, 빠른 피드백, 쉬운 설정 등 개발자 경험을 극대화할 수 있는 다양한 기능을 제공합니다.
복잡한 쿼리: Prisma는 ORM이므로, 복잡한 SQL 쿼리를 작성하는 데 제한적일 수 있습니다. 복잡한 데이터베이스 작업이 필요한 경우 직접 SQL을 작성해야 할 수도 있습니다.
지원하는 데이터베이스: Prisma는 특정 데이터베이스(주로 PostgreSQL, MySQL, SQLite 등)만을 지원하며, 모든 데이터베이스를 지원하지는 않습니다.

ORM은 관계형 데이터베이스와 객체 지향 프로그래밍 간의 간극을 줄여주는 중요한 도구로, SQL을 직접 작성하지 않고도 객체를 통해 데이터베이스 작업을 쉽게 할 수 있습니다. Prisma는 TypeScript와 Node.js에 최적화된 최신 ORM 도구로, 타입 안전성을 제공하며, 데이터베이스 마이그레이션과 직관적인 API를 통해 개발 경험을 극대화합니다.