Prisma가 MySql View 마이그레이션을 제공하지 않는 상황에 대처하기

김현웅·2022년 6월 21일
3
post-thumbnail
post-custom-banner

문제 직면

Prisma 에서는 schema.prisma를 바탕으로 테이블들을 간편하게 만들 수 있도록 Migration 기능을 제공한다.

등장한지 얼마 안된 ORM 이여서, 아직 제공하지않는 몇몇 필요한 기능들이 있다. 오늘은 mysql view 처리 작업을 하다가 해당 문제를 직면했다.

아래는 view 관련 공식문서 이다.

직접 view 스키마를 작성하라고한다. 또한 모델링도 테이블이랑 똑같이 작성하도록 되어있어서 이렇게 하면 prisma migrate 기능에 의해 DB 와 동기화 할 때 프리즈마 미들웨어에서 테이블과 뷰를 어떻게 구분할 방법이 없다.

그말은 즉슨 migrate 을 사용할 수 없음을 의미한다. (사실 view 를 지원하지 않는것이 맞는데 공식문서에 왜 이런식으로 설명이 되어있는지는 아직 모르겠다.)

아래에는 view 를 사용하고 싶어했던 사람들이 모여있는 prisma github issue 들이다.

https://github.com/prisma/prisma/issues/8864
https://github.com/prisma/prisma/issues/678

migrate ignore 기능을 제공하여 view 스키마는 migrate 이 되지 않도록 하는 방식으로 문제를 해결하자는 의견이다. 좋은 방식인 것 같으나 진전은 없어 보였다.
이들의 의견을 참고하여 아래와 같이 해결을 할 수 있었다.

해결방식

prisma 에서 view 를 사용하지 못하는 컨텍스트는 아래와 같다.

  1. prisma client 반영은 prisma generate가 처리한다.
  2. migrate 은 prisma migrate이 처리한다.

1번은 문제가 되지 않는다. 뷰와 테이블은 똑같은 방식으로 타입이 만들어져야하기 때문이다.
2번이 문제가 된다. 위 이슈에서 사람들의 의견 대로, view 가 마이그레이션 되지 않도록 할 수 있다면, view 를 생성하는 migration 파일을 직접 만들어주고 스키마에서는 취급하지 않도록 처리하는 방향으로 해결할 수 있다.

prisma 에서는 migrate 하는 schema 파일과, generate 하는 스키마 파일을 각각 별도로 지정해줄 수 있다.

따라서 뷰를 위한 schema 파일과 table 을 위한 schema 파일을 분리하면 뷰는 migrate 되지 않게 처리할 수 있다.

migrate 기능으로 부터 자유로운 모델링을 할 수 있는 것이다.

기존 스키마 파일 형태

ㄴschema.prisma

변형한 스키마 파일 형태

ㄴschema.prisma
ㄴview.prisma
ㄴgenerated.prisma

기존에는 하나의 schema.prisma 를 통해 generate 과 migrate 을 처리했다면, 이제는 아래와 같이 변경해서 사용한다.

  • generate의 대상은 generated.prisma
    generated.prisma 는 두 스키마를 합친 파일이다. ( == cat schema.prisma view.prisma)
  • migrate의 대상은 schema.prisma
    뷰를 제외한 테이블들의 스키마이다.

이러한 방식으로 view를 generate은 시키되 migrate에서는 벗어나게 할 수 있었다.

깃허브 이슈를 보면 알 수 있듯이, 머지않아 prisma 에서 view 관련 기능이 런칭될 것으로 예상된다. 그때까지 이런 형태로 사용할 예정이다.

prisma는 현재 mysql view를 지원하지 않는 ORM 이라고 말할 수 있다.
하지만 제시된 해결책이 없는 주어진 상황에서, 원하던 View를 사용할 수 있게 되었다.

좋은 방식으로 해결한 것은 아니다. 스키마를 두개로 운용한다는 것이 복잡성을 늘리는 방향이고, 임시 방편일 뿐이다. 얼른 view 를 지원하는 새로운 프리즈마 버전이 업데이트 되었으면 좋겠다..!

** UPDATE 23.02.02

프리즈마에서 VIEW 기능을 만들어주었습니다! : )
https://www.prisma.io/docs/concepts/components/prisma-schema/views

profile
경험을 기록하는 블로그입니다.
post-custom-banner

4개의 댓글

comment-user-thumbnail
2022년 9월 24일

저도 같은 경험을 해봤어요!

1개의 답글
comment-user-thumbnail
2023년 1월 31일

사이드 프로젝트할 때 고민 많이했던 부분인데 2주 전 4.9.0 버전으로 view(preview) 으로 출시 했네요 ^^

1개의 답글