Skip to content

Prisma 사용기

Yu Taek LEE edited this page Nov 26, 2020 · 1 revision

큰 실패

저희 팀이 몇일간 DB 스키마를 작성하기 위해 Sequelize를 써서 열심히 했으나...! TypeScript로 옮기려고 하자 온갖 에러가 발생하며 저희를 괴롭혔습니다.. 하루동안의 사투 끝에 내린 결론은 이건 안된다... 버려야 한다... NextJS와 맞는 글을 찾기 어렵더군요... 결국 생SQL로 다시 갈 뻔 했으나 이미 ORM에 빠진 저로서는 선뜻 결정하기 어려웠습니다...

그러던 중..

image

next...?

image

typescript...?

하지만 이미 모든 DB를 sequelize로 짜놓은 저희는 계속 우왕좌왕 하고 있었습니다... 그러다가 구글에서 찾은 이 글...!

https://medium.com/labelstore/prisma%EB%A1%9C-graphql%EC%9D%84-%EC%89%BD%EA%B2%8C-%EB%8F%84%EC%9E%85%ED%95%98%EA%B8%B0-fa64dcf63382

해당 글을 보고, 엄청나게 직관적인 사용을 지향하는 것을 바라보고 팀원들이 모두 반해서 사용하기로 결정하고 각자 공부하고 있었습니다. 그러던 중 발견 해 버린 기능...!

image

...?

image

...? 바로 적용해보았습니다.

Amazing한 prisma introspect!

image

하하... 이 아름다운 녀석은.. 있는 db를 살펴본 뒤 코드를 작성해주기까지 하는 amazing한 녀석이였던 것입니다... Prisma의 매력에 빠져가고 있습니다...

Sequelize와 비교하면...?

Sequelize

Sequelize의 사용법은 아래와 같습니다.(async로 감싸져있다 생각해 주세요.)

const { Tracks } = require('../db/models');
const track = await Tracks.findAll();

생성되어 있는 모델을 import 해온 뒤 해당 모델의 method를 사용하여 찾는 방식이죠.

Prisma는...?

const result = await prisma.tracks.findMany();  

prisma는 미리 PrismaClient를 이용해 생성된 객체 입니다. 해당 prisma에는 이미 모델들에 대한 정보들이 들어있기 떄문에 자동완성으로 모델들을 입력해줍니다.(고마운 타입스크립트와 프리즈마....)

결론?

Prisma는 현재까지는 너무 좋습니다. 속도면에서는 정확하게 비교가 불가능하지만 DB => 코드로 변환이 가능하다는 점에서 일단 1승을 주고 싶습니다. migration 같은 경우에는 sequelize-cli에 한표를 주고 싶습니다. sequelize-cli는 up, down이 명확하게 구분이 되어 있어 rollback이 쉽습니다만 prisma는 down때 어떤 함수가 작동해야 되는지 어디 입력해야 될지 바로 찾기가 힘듭니다. 또한 마이그레이션 관련 에러로 다같이 3시간 정도 날려버린 적이 있었는데 migration 당시 --save를 할 때는 에러가 발생하는지에 관심이 없습니다. up을 하는 순간 에러가 발생하는데 해당 에러가 계속해서 저장이 되는지 down, 삭제 등의 방법을 써봐도 지울수가 없어 결국 DB와 로컬 폴더의 .migrations 폴더를 삭제하고 초기화한 뒤 다시 마이그레이션 파일들을 쌓아야 했습니다. 이런 점에서 Sequelize에도 1승을 주겠습니다.

뭐가 더 좋은지는 딱 말할수 없으나 지금까지는 prisma에 만족하고 있기 때문에 팀원들 모두 다음 기회에도 써 볼 의향이 있다고 합니다. 다만 prisma는 작동하는 방식이 기존 ORM과 조금 달라 관심이 있으신 분들은 아래 링크에서 한번 살펴 보는 것도 좋을 듯 합니다. 감사합니다.

Prisma 작동 방식

Clone this wiki locally