ORM과 prisma

허선준·2024년 9월 27일

본캠프

목록 보기
20/25

ORM (Object-Relational Mapping)
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어에서 관계형 데이터베이스를 사용할 때, 데이터베이스의 테이블과 객체(클래스) 간의 매핑을 자동으로 처리해 주는 기법 또는 도구입니다. ORM을 사용하면 SQL을 직접 작성하지 않고도, 데이터베이스의 데이터를 객체와 연결하여 쉽게 처리할 수 있습니다.

ORM의 주요 특징

  1. 객체와 데이터베이스 테이블 간의 매핑: 객체 지향 언어에서 사용하는 클래스와 관계형 데이터베이스의 테이블을 1:1로 매핑하여 데이터를 처리할 수 있게 해줍니다. 객체의 속성과 데이터베이스의 필드를 자동으로 연결해줍니다.
  2. SQL 쿼리 자동 생성: 개발자는 직접 SQL을 작성할 필요 없이, ORM이 제공하는 메서드 호출만으로 CRUD 작업(삽입, 조회, 수정, 삭제)을 할 수 있습니다. ORM이 내부적으로 적절한 SQL 쿼리를 생성하여 실행합니다.
  3. 데이터베이스 독립성: ORM은 특정 데이터베이스에 종속되지 않고, 여러 데이터베이스에서 사용할 수 있습니다. 데이터베이스가 바뀌더라도 ORM을 사용하면 코드 수정이 최소화됩니다.
  4. 생산성 향상: SQL을 직접 작성하는 대신 ORM이 제공하는 고수준의 API를 사용하므로, 코드 작성 시간이 줄어들고 유지 보수가 쉬워집니다.

ORM의 예시

  • Hibernate (Java): Java에서 가장 많이 사용되는 ORM 라이브러리로, 관계형 데이터베이스와 Java 객체 간의 매핑을 처리합니다.
  • TypeORM (TypeScript/JavaScript): Node.js에서 사용되는 ORM으로, TypeScript나 JavaScript 기반의 애플리케이션에서 사용됩니다.
  • SQLAlchemy (Python): Python 애플리케이션에서 관계형 데이터베이스를 관리할 때 주로 사용되는 ORM입니다.
  • Eloquent (PHP, Laravel): PHP의 프레임워크 Laravel에서 제공하는 ORM입니다.

ORM의 장점

  1. 코드의 일관성: ORM을 사용하면 데이터베이스 작업이 객체 지향적으로 처리되어 코드의 일관성과 가독성이 높아집니다.

  2. 유지보수 용이성: SQL 쿼리를 직접 작성하지 않고, 객체 단위로 데이터를 다루기 때문에 유지보수가 용이해집니다.

  3. 데이터베이스 독립성: 하나의 ORM 도구로 여러 데이터베이스를 쉽게 전환할 수 있습니다.

ORM의 단점

  1. 복잡한 쿼리: ORM은 복잡한 SQL 쿼리를 생성하는 데 제한적일 수 있으며, 성능 최적화가 필요한 경우 직접 SQL 쿼리를 작성하는 것이 더 효율적일 때도 있습니다.

  2. 성능 저하: 대규모 데이터베이스나 복잡한 데이터 조작이 필요한 경우 ORM이 생성하는 쿼리가 비효율적일 수 있습니다.

Prisma란?

PrismaNode.jsTypeScript 환경에서 사용하는 최신 ORM 도구입니다. Prisma는 데이터베이스와 상호작용을 단순화하고, 타입 안전성을 제공하며, 데이터베이스 작업을 더욱 직관적으로 처리할 수 있게 돕습니다. 특히 Prisma는 기존의 ORM보다 더 직관적이고 현대적인 API를 제공하는 것이 특징입니다.

Prisma의 주요 특징

  1. Prisma Client: 데이터베이스와 상호작용하는 고수준의 API를 제공하는 ORM입니다. Prisma Client는 각 테이블에 대해 타입 안전한 메서드를 생성하며, 이를 통해 SQL 쿼리 없이 데이터베이스 작업을 할 수 있습니다.

  2. Prisma Migrate: 데이터베이스 스키마를 관리하고 마이그레이션을 간편하게 수행할 수 있도록 도와주는 도구입니다. Prisma Migrate를 사용하면 스키마의 변경 사항을 쉽게 데이터베이스에 적용할 수 있습니다.

  3. Prisma Studio: 웹 기반의 데이터베이스 GUI(그래픽 사용자 인터페이스)입니다. 이를 통해 데이터베이스의 테이블과 데이터를 시각적으로 관리할 수 있습니다.

  4. 타입 안전성: Prisma는 TypeScript를 기반으로 하여 데이터베이스 작업 시 높은 타입 안전성을 보장합니다. 이는 데이터베이스 작업 중 실수를 줄이고, 개발자 경험을 향상시킵니다.

  5. 자동 완성 지원: Prisma Client는 TypeScript의 강력한 자동 완성 기능을 제공하여, 데이터베이스 작업 시 코드 작성 속도를 높이고 오류를 줄일 수 있습니다.

Prisma의 주요 컴포넌트

1.Prisma Schema

  • Prisma 프로젝트의 중심이 되는 파일로, 데이터베이스 모델을 정의합니다. 이 파일에는 데이터베이스 연결 정보, 테이블 정의, 관계 등이 포함됩니다.
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])
}
  • 위 예시에서, User와 Post 두 가지 모델이 정의되어 있으며, 이를 통해 Prisma가 자동으로 테이블을 생성하고 관리할 수 있습니다.
  1. Prisma Client
  • Prisma Client는 데이터베이스와 상호작용할 때 사용되는 코드입니다. 모델에 따라 자동으로 생성된 API를 통해 CRUD 작업을 매우 직관적으로 처리할 수 있습니다.
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();
  });
  • 이 코드에서 Prisma Client를 사용하여 사용자 데이터를 추가하고, 모든 사용자를 조회하는 작업을 쉽게 수행할 수 있습니다.
  1. Prisma Migrate
  • 데이터베이스의 스키마를 변경할 때 사용하는 마이그레이션 도구입니다. 모델을 수정한 후, Prisma Migrate를 사용해 해당 변경 사항을 데이터베이스에 반영할 수 있습니다.
npx prisma migrate dev --name "init"
  1. Prisma Studio
  • 데이터베이스를 시각적으로 관리할 수 있는 툴로, 테이블과 데이터를 편집할 수 있습니다.
npx prisma studio

Prisma의 장점

  1. 타입 안전성: Prisma는 TypeScript의 타입 시스템과 깊이 통합되어 있어 데이터베이스 작업 시 타입 오류를 줄이고 더 안전한 코드를 작성할 수 있습니다.

  2. 직관적인 API: Prisma Client는 직관적이고 간결한 API를 제공하여 데이터베이스 작업을 빠르고 쉽게 처리할 수 있습니다.

  3. 자동화된 마이그레이션: Prisma Migrate는 데이터베이스 마이그레이션을 자동화하여, 개발자가 데이터베이스 스키마를 관리하는 데 걸리는 시간을 줄입니다.

  4. 개발자 친화적: Prisma는 자동 완성, 빠른 피드백, 쉬운 설정 등 개발자 경험을 극대화할 수 있는 다양한 기능을 제공합니다.

Prisma의 단점

  1. 복잡한 쿼리: Prisma는 ORM이므로, 복잡한 SQL 쿼리를 작성하는 데 제한적일 수 있습니다. 복잡한 데이터베이스 작업이 필요한 경우 직접 SQL을 작성해야 할 수도 있습니다.

  2. 지원하는 데이터베이스: Prisma는 특정 데이터베이스(주로 PostgreSQL, MySQL, SQLite 등)만을 지원하며, 모든 데이터베이스를 지원하지는 않습니다.

ORM과 Prisma의 비교

결론

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

profile
코딩 초보

0개의 댓글