-
목차
1. 개요
데이터베이스 관리는 백엔드 개발에서 가장 중요한 요소 중 하나다. 전통적인 SQL 쿼리를 직접 작성하는 방식은 복잡한 로직 구현과 유지보수가 어렵고, 코드의 가독성이 떨어지는 단점이 있다. 이를 해결하기 위해 등장한 **Prisma ORM(Object-Relational Mapping)**은 MySQL, PostgreSQL, MongoDB 등 다양한 데이터베이스를 손쉽게 관리할 수 있도록 도와주는 강력한 도구다.
Prisma는 TypeScript 및 JavaScript 환경에서 사용하기 최적화된 ORM으로, 직관적인 데이터 모델링, 자동 마이그레이션, 강력한 타입 지원을 제공한다. 이번 글에서는 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을 사용하는 예제다.
prismagenerator 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())로 설정해야 함
prismamodel 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으로써 적극 추천할 만하다.
'IT & 웹개발' 카테고리의 다른 글
Docker와 Kubernetes – 컨테이너 기반 개발 환경 구축하기 (0) 2025.03.19 서버리스(Serverless) 아키텍처 – AWS Lambda, Firebase Functions 활용 (0) 2025.03.19 웹 애니메이션 – GSAP, Lottie를 활용한 인터랙션 디자인 (0) 2025.03.19 다크 모드(Dark Mode) 구현하는 다양한 방법 (0) 2025.03.19 웹 접근성(Accessibility) 개선을 위한 필수 체크리스트 (0) 2025.03.18