Node.js 프로젝트에 Prisma 2 도입 후기
배경
회사 프로젝트에서 TypeORM을 사용하고 있었는데, 복잡한 쿼리를 작성할 때마다 타입 추론이 제대로 되지 않아 불편함을 느꼈다. Prisma 2가 정식 릴리즈된 후 평이 좋아서 작은 마이크로서비스에 먼저 적용해보기로 했다.
도입 과정
스키마 정의
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
createdAt DateTime @default(now())
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
TypeORM의 데코레이터 방식보다 훨씬 직관적이었다. 스키마 파일 하나로 DB 구조가 한눈에 보였다.
타입 안정성
const user = await prisma.user.findUnique({
where: { id: 1 },
include: { posts: true }
});
// user의 타입이 자동으로 추론됨
if (user) {
console.log(user.posts[0].title); // 타입 체크 완벽
}
Prisma Client가 스키마 기반으로 타입을 자동 생성해주니 TypeScript 경험이 완전히 달라졌다. VSCode 자동완성도 정확하게 동작했다.
마이그레이션 도구
prisma migrate dev --name init
마이그레이션 파일이 SQL로 생성되어 버전 관리가 명확했다. TypeORM의 마이그레이션보다 예측 가능했고, 롤백도 안정적이었다.
제약 사항
완벽하지는 않았다. Raw 쿼리를 써야 하는 복잡한 집계 쿼리에서는 타입 추론이 안 되었고, MongoDB 지원이 실험적 단계라 프로덕션에서 쓰기 애매했다. 그리고 N+1 문제를 해결하려면 include를 신중하게 설계해야 했다.
결론
작은 프로젝트부터 시작해서 정답이었다. 팀원들 반응도 좋았고, 타입 안정성 덕분에 런타임 에러가 확실히 줄었다. 다음 프로젝트는 처음부터 Prisma로 시작할 예정이다.