모노리포에서 Prisma 사용하기

간단한 프리즈마 소개

프리즈마에는 크게 두가지 중요한 개념이 있습니다. 스키마 그리고 클라이언트 인데요:

  • 프리즈마 스키마는 데이터 모델과 데이터베이스 설정을 정의하는 텍스트 파일이며, 이렇게 생겼습니다:
  • 이 스키마를 이용해서 프리즈마는 @prisma/client 라는 패키지를 생성하는데, 이 패키지가 ORM의 타입지원과 기능을 제공합니다:

그렇다면 여러 패키지에서 하나의 @prisma/client를 돌려 쓰려면 어떻게 해야 하나요?

모노리포 워크스페이스 구조가 이런 식으로 생겼다고 해봅시다:

- Project Root
- apps
- dashboard
- libs
- core
- Project Root
- apps
- dashboard
- libs
- core
- shared-prisma
- prisma
- schema.prisma
- src
- index.ts

Nx 사용시 주의사항

buildable 혹은 publishable 라이브러리를 사용하지 않는다면, 모든 의존성이 워크스페이스에 설치됩니다. 상황에 따라 이게 편할 수도 있지만 정말 불편할 수도 있습니다.

  • 좋은 경우: @prisma/client가 워크스페이스에 설치되기 때문에 별도로 shared-prisma에서 re-export를 할 필요가 없습니다. 모든 패키지에서 이미 @prisma/client에 접근 가능합니다.
  • 안좋은 경우: 모노리포 안에 서로 다른 프리즈마 스키마를 (따라서 다른 프리즈마 클라이언트를) 사용하는 앱이 여러개 있는 경우, Nx의 이러한 구조가 골치아픕니다. 각각의 프리즈마 스키마에서 @prisma/client를 생성할 때마다 전부 워크스페이스의 @prisma/client를 덮어쓰기 때문입니다. 이 문제를 해결하기 위해서는shared-prisma를 독립적인 package.jsonnode_modules를 가진 buildable Nx 라이브러리로 만들어줘야합니다.

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store