Prisma ORM에 대하여
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의 차별점
- 타입 안정성 (Type-Safe) : Prisma의 가장 큰 장점이며, 데이터베이스 스키마를 기반으로 완벽한 타입이 적용된 클라이언트를 생성합니다. 코드 작성 시 자동 완성이 지원되고 존재하지 않는 컬럼에 접근하는 등의 실수를 컴파일 단계에서 막아줍니다.
- 직관적인 스키마 파일 (schema.prisma) : 데이터베이스의 구조를 하나의 파일에서 명확하고 읽기 쉽게 관리합니다. 이 파일만 보면 DB 전체 구조를 파악할 수 있습니다.
- 안전한 데이터베이스 마이그레이션 : 'prisma migrate' 명령어로 데이터베이스 구조 변경 이력을 자동으로 관리하고 안전하게 적용할 수 있습니다.
Prisma는 3가지 핵심 요소로 구성됩니다.
| 요소 | 역할 | 비유 |
| Prisma Schema | 데이터베이스 구조를 정의하는 설계도 | 건물의 청사진 |
| Prisma Migrate | 설계도를 보고 실제 DB를 변경하는 시공사 | 청사진대로 건물을 짓는 일 |
| Prisma Client | 완성된 DB를 코드에서 조작하는 리모컨 | 완성된 건물 시설을 사용하는 리모컨 |
Prisma ORM 사용법
간단한 블로그의 User와 Post 테이블을 만든다는 가정으로 진행합니다.
설치 및 초기 설정
- 필요한 패키지 설치Generated bash
// Prisma CLI(명령어 도구) 설치 npm install prisma --save-dev // Prisma Client(코드에서 사용할 라이브러리) 설치 npm install @prisma/client - Prisma 프로젝트 초기화Generated bash
위의 명령어을 실행하면 prisma 폴더와 그 안에 schema.prisma 파일, .env 파일이 생성됩니다.
npx prisma init - .env 파일에 데이터베이스 연결 정보 입력
.env 파일을 열어 자신의 데이터베이스 주소를 입력합니다. (예: PostgreSQL)Generated envDATABASE_URL="postgresql://사용자이름:비밀번호@호스트:포트/데이터베이스이름"
2단계: 데이터 모델링 (schema.prisma 작성)
prisma/schema.prisma 파일이 데이터베이스의 설계도입니다. 여기에 User와 Post 모델을 정의합니다.
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에 User와 Post 테이블이 생성되고 동시에 최신 스키마에 맞는 Prisma Client가 자동으로 생성(업데이트)됩니다.
4단계: Prisma Client의 데이터 조작 (CRUD)
이제 코드에서 데이터를 자유자재로 다룰 수 있습니다.
- Prisma Client 인스턴스 생성
애플리케이션에서 한 번만 생성하여 재사용하는 것이 좋습니다.// lib/prisma.ts import { PrismaClient } from '@prisma/client' export const prisma = new PrismaClient() - 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" }, });
- 데이터 생성 (Create)
정리
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 |