꽈코 님의 블로그

프론트엔드 개발자를 넘어 풀스텍 개발자가 되기까지!! 개발자의 모든것!!

  • 2025. 3. 19.

    by. kkwako

    목차

      1. 개요

      데이터베이스 관리는 백엔드 개발에서 가장 중요한 요소 중 하나다. 전통적인 SQL 쿼리를 직접 작성하는 방식은 복잡한 로직 구현과 유지보수가 어렵고, 코드의 가독성이 떨어지는 단점이 있다. 이를 해결하기 위해 등장한 **Prisma ORM(Object-Relational Mapping)**은 MySQL, PostgreSQL, MongoDB 등 다양한 데이터베이스를 손쉽게 관리할 수 있도록 도와주는 강력한 도구다.

      Prisma는 TypeScript 및 JavaScript 환경에서 사용하기 최적화된 ORM으로, 직관적인 데이터 모델링, 자동 마이그레이션, 강력한 타입 지원을 제공한다. 이번 글에서는 Prisma ORM의 주요 특징과 활용법, 그리고 MySQL, PostgreSQL, MongoDB에서의 적용 방법을 살펴보겠다.

       

      Prisma ORM – MySQL, PostgreSQL, MongoDB를 쉽게 관리하는 방법

       


      2. Prisma ORM의 주요 특징

      직관적인 데이터 모델링

      • Prisma는 Schema-first 접근 방식을 사용하여 데이터 모델을 직관적으로 정의할 수 있다.
      • 데이터베이스 테이블과 컬럼을 Prisma Schema 파일에서 쉽게 정의하고 관리할 수 있다.

      자동 마이그레이션 및 동기화

      • 데이터 모델 변경 사항을 자동으로 반영하는 마이그레이션 기능을 제공한다.
      • prisma migrate 명령어를 통해 데이터베이스 스키마를 최신 상태로 유지할 수 있다.

      타입 안정성 및 코드 자동 완성

      • Prisma는 TypeScript와 완벽하게 통합되어 정적 타입 체크 및 자동 완성 기능을 제공한다.
      • prisma generate 명령어를 실행하면 데이터 모델을 기반으로 TypeScript 타입을 자동 생성해 준다.

      다양한 데이터베이스 지원

      • MySQL, PostgreSQL, SQLite, MongoDB, SQL Server 등 여러 데이터베이스와 호환된다.
      • 클라우드 환경에서도 AWS RDS, Google Cloud SQL, PlanetScale과 쉽게 통합할 수 있다.

      강력한 Prisma Client API

      • 데이터 조회, 생성, 수정, 삭제(CRUD) 기능을 제공하는 Prisma Client를 통해 SQL 없이도 데이터 조작이 가능하다.
      • 트랜잭션 지원 및 복잡한 쿼리 실행이 간편하다.

      3. Prisma ORM 설치 및 기본 설정

      ✅ 1) Prisma 설치

      NestJS, Express, Next.js 등 Node.js 프로젝트에서 Prisma를 사용하려면 다음과 같이 설치한다.

      # Prisma CLI 설치
      npm install prisma --save-dev
      
      # Prisma Client 설치
      npm install @prisma/client

      그다음, Prisma 초기화를 진행한다.

      npx prisma init

      위 명령어를 실행하면 프로젝트 폴더에 prisma/schema.prisma 파일이 생성된다.


      4. Prisma 데이터 모델링 및 마이그레이션

      ✅ 1) Prisma Schema 설정

      Prisma의 데이터 모델은 schema.prisma 파일에서 정의할 수 있다. 아래는 MySQL을 사용하는 예제다.

      prisma
       
      generator client {
        provider = "prisma-client-js"
      }
      
      datasource db {
        provider = "mysql"  // 사용할 데이터베이스 유형
        url      = env("DATABASE_URL") // .env 파일에서 DB URL 가져오기
      }
      
      model User {
        id        Int      @id @default(autoincrement()) // 기본 키 & 자동 증가
        email     String   @unique // 고유한 이메일
        name      String?
        posts     Post[]   // User와 Post는 1:N 관계
        createdAt DateTime @default(now()) // 기본값: 현재 시간
      }
      
      model Post {
        id        Int      @id @default(autoincrement())
        title     String
        content   String?
        author    User     @relation(fields: [authorId], references: [id])
        authorId  Int
      }

      ✅ 2) 데이터베이스 마이그레이션 실행

      Prisma는 데이터 모델을 정의한 후, 이를 데이터베이스에 반영하는 마이그레이션 기능을 제공한다.

      npx prisma migrate dev --name init

      위 명령어를 실행하면 마이그레이션 파일이 자동 생성되고 데이터베이스가 업데이트된다.


      5. Prisma Client를 활용한 CRUD 예제

      Prisma는 데이터베이스 작업을 쉽게 수행할 수 있도록 Prisma Client API를 제공한다.

      ✅ 1) Prisma Client 인스턴스 생성

      Prisma Client를 사용하려면, @prisma/client를 가져와야 한다.

      import { PrismaClient } from '@prisma/client';
      
      const prisma = new PrismaClient();

      ✅ 2) 데이터 생성 (Create)

      아래 코드는 새로운 사용자(User)를 생성하는 예제다.

      const newUser = await prisma.user.create({
        data: {
          email: "test@example.com",
          name: "홍길동",
        },
      });
      
      console.log("생성된 사용자:", newUser);

      ✅ 3) 데이터 조회 (Read)

      모든 사용자(User) 가져오기

      const users = await prisma.user.findMany();
      console.log(users);

      특정 ID의 사용자 가져오기

      const user = await prisma.user.findUnique({
        where: { id: 1 },
      });
      console.log(user);

      ✅ 4) 데이터 수정 (Update)

      아래 코드는 사용자의 이름을 업데이트하는 예제다.

      const updatedUser = await prisma.user.update({
        where: { id: 1 },
        data: { name: "김철수" },
      });
      console.log("업데이트된 사용자:", updatedUser);

      ✅ 5) 데이터 삭제 (Delete)

      아래 코드는 특정 사용자를 삭제하는 예제다.

      await prisma.user.delete({
        where: { id: 1 },
      });
      console.log("사용자가 삭제되었습니다.");

      6. MySQL, PostgreSQL, MongoDB에서의 Prisma 적용

      MySQL 사용 시

      • schema.prisma에서 provider = "mysql" 설정
      • .env 파일에 MySQL 연결 정보 추가
      DATABASE_URL="mysql://user:password@localhost:3306/mydb"

      PostgreSQL 사용 시

      • provider = "postgresql"로 변경
      • .env 파일 수정
      DATABASE_URL="postgresql://user:password@localhost:5432/mydb"

      MongoDB 사용 시

      • provider = "mongodb"로 설정
      • .env 파일 수정
      DATABASE_URL="mongodb+srv://user:password@cluster.mongodb.net/mydb"
       
      • MongoDB는 SQL과 달리 관계형 데이터 모델을 지원하지 않으므로, ID 필드를 @id @default(auto())로 설정해야 함
      prisma
       
      model User {
        id    String @id @default(auto()) @map("_id")
        email String @unique
        name  String?
      }

       


      7. 결론

      Prisma ORM은 MySQL, PostgreSQL, MongoDB 등 다양한 데이터베이스를 효율적으로 관리할 수 있는 강력한 도구다.

      직관적인 데이터 모델링 및 강력한 타입 지원
      자동 마이그레이션을 통한 데이터베이스 동기화
      간결하고 쉬운 CRUD API 제공

      NestJS, Express, Next.js 등 다양한 백엔드 프레임워크와도 쉽게 통합 가능하며, 생산성을 극대화하는 ORM으로써 적극 추천할 만하다.