Prisma ORM이란?

Prisma는 Node.js와 TypeScript를 위한 ORM(Object-Relational Mapper)입니다.

ORM이란, 프로그래밍 코드의 객체(Object)와 관계형 데이터베이스(Relational DB)의 테이블을 서로 연결(Mapping)해주는 '번역기'와 같은 역할을 하고 있습니다.

복잡한 SQL 쿼리문(SELECT * FROM users WHERE ... 등)으로 작성하는 대신 익숙한 JavaScript/TypeScript 코드(prisma.user.findMany() 등)로 데이터베이스를 조작할 수 있게 해줍니다.


Prisma ORM의 차별점

  1. 타입 안정성 (Type-Safe) : Prisma의 가장 큰 장점이며, 데이터베이스 스키마를 기반으로 완벽한 타입이 적용된 클라이언트를 생성합니다. 코드 작성 시 자동 완성이 지원되고 존재하지 않는 컬럼에 접근하는 등의 실수를 컴파일 단계에서 막아줍니다.
  2. 직관적인 스키마 파일 (schema.prisma) : 데이터베이스의 구조를 하나의 파일에서 명확하고 읽기 쉽게 관리합니다. 이 파일만 보면 DB 전체 구조를 파악할 수 있습니다.
  3. 안전한 데이터베이스 마이그레이션 : 'prisma migrate' 명령어로 데이터베이스 구조 변경 이력을 자동으로 관리하고 안전하게 적용할 수 있습니다.

Prisma는 3가지 핵심 요소로 구성됩니다. 

요소 역할 비유
Prisma Schema 데이터베이스 구조를 정의하는 설계도 건물의 청사진
Prisma Migrate 설계도를 보고 실제 DB를 변경하는 시공사 청사진대로 건물을 짓는 일
Prisma Client 완성된 DB를 코드에서 조작하는 리모컨 완성된 건물 시설을 사용하는 리모컨

Prisma ORM 사용법

간단한 블로그의 UserPost 테이블을 만든다는 가정으로 진행합니다.

설치 및 초기 설정

  1. 필요한 패키지 설치Generated bash
    // Prisma CLI(명령어 도구) 설치
    npm install prisma --save-dev
    
    // Prisma Client(코드에서 사용할 라이브러리) 설치
    npm install @prisma/client

     

  2. Prisma 프로젝트 초기화Generated bash
          npx prisma init
    위의 명령어을 실행하면 prisma 폴더와 그 안에 schema.prisma 파일, .env 파일이 생성됩니다.

  3. .env 파일에 데이터베이스 연결 정보 입력
    .env 파일을 열어 자신의 데이터베이스 주소를 입력합니다. (예: PostgreSQL)Generated env
          DATABASE_URL="postgresql://사용자이름:비밀번호@호스트:포트/데이터베이스이름"

2단계: 데이터 모델링 (schema.prisma 작성)

prisma/schema.prisma 파일이 데이터베이스의 설계도입니다. 여기에 UserPost 모델을 정의합니다.

Generated prisma

// prisma/schema.prisma

// 데이터베이스 종류와 주소를 지정합니다.
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

// Prisma Client를 생성하기 위한 설정입니다.
generator client {
  provider = "prisma-client-js"
}

// User 모델 (users 테이블)
model User {
  id    Int     @id @default(autoincrement()) // 고유 ID (기본 키), 자동 증가
  email String  @unique // 이메일 (중복 불가)
  name  String? // 이름 (선택 사항)
  posts Post[]  // 한 명의 유저는 여러 개의 Post를 가짐 (1:N 관계)
}

// Post 모델 (posts 테이블)
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id]) // User 모델과 관계 설정
  authorId  Int      // 외래 키
}

설계도를 실제 데이터베이스에 적용합니다. 터미널에 다음 명령어를 입력하세요.

      npx prisma migrate dev --name "init"
  • migrate dev: 개발 환경에서 마이그레이션을 실행합니다.
  • --name "init": 이 변경 사항에 "init"이라는 이름을 붙여 히스토리를 관리합니다.

위 명령 성공시, DB에 UserPost 테이블이 생성되고 동시에 최신 스키마에 맞는 Prisma Client가 자동으로 생성(업데이트)됩니다.

4단계: Prisma Client의 데이터 조작 (CRUD)

이제 코드에서 데이터를 자유자재로 다룰 수 있습니다.

  1. Prisma Client 인스턴스 생성
    애플리케이션에서 한 번만 생성하여 재사용하는 것이 좋습니다.
    // lib/prisma.ts
    import { PrismaClient } from '@prisma/client'
    
    export const prisma = new PrismaClient()
  2. CRUD 작업 수행
    • 데이터 생성 (Create)
      const newUser = await prisma.user.create({
        data: {
          email: "test@example.com",
          name: "김강현",
        },
      });
    • 데이터 조회 (Read)
      // 모든 사용자 조회
      const users = await prisma.user.findMany();
      
      // 특정 게시물을 작성자 정보와 함께 조회
      const post = await prisma.post.findUnique({
        where: { id: 1 },
        include: {
          author: true, // author 관계를 포함해서 가져옴
        },
      });
    • 데이터 수정 (Update)
      const updatedPost = await prisma.post.update({
        where: { id: 1 },
        data: {
          published: true,
        },
      });
    • 데이터 삭제 (Delete)
      const deletedUser = await prisma.user.delete({
        where: { email: "test@example.com" },
      });

       


정리

Prisma의 핵심 사용법을 정리했습니다.
위의 단계를 통해서 SQL 쿼리 없이 타입스크립트 코드만으로 안전하고 직관적으로 데이터베이스를 관리할 수 있습니다.

728x90

'CS' 카테고리의 다른 글

세션(Session)이란?  (1) 2025.08.03
클린 아키텍쳐(Clean Architecture)란?  (0) 2025.07.12
객체 지향이란?  (0) 2025.06.29
데이터 정규화(Normalization)란?  (0) 2025.06.26
동기화와 비동기화  (0) 2025.06.20