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로 시작할 예정이다.

Node.js 프로젝트에 Prisma 2 도입 후기