Prisma2? Prisma1이랑 무슨 차이인지 알아봤습니다.

2019. 12. 31. 00:36OS & Server/Prisma

Prisma는 다른 게시글에서도 많이 언급해왔던 주제이기 때문에 간단하게 설명하자면

GraphQL이나 RestAPI를 사용할 때 Database의 schema를 통해 DB를 정의하며,

ORM을 대체하고 migration을 쉽게 해주는 DB 프록시 도구입니다.

 

 

여러분들의 가장 큰 주요 관심사를 먼저 말씀드리자면

네 Prisma1에서 갈아타시는걸 추천...

 

 

기존 Prisma에는 크나큰 한 가지 문제가 있었는데,

JVM을 통해 실행되어 메모리 이슈가 빈번함

 

이에 Prisma Project 개발자들은 Prisma Framework라고 칭하며, 통칭 Prisma2를 만들었습니다.

Prisma Framework는 근래 많이 사용되기 시작하는 Rust(러스트)를 통해 작성되었습니다.

 

 

 

 

Prisma와 Prisma Framework 차이점은?

요약

  • DB Proxy Optional
  • Front-end Server와 Back-end Server의 통합
  • 구성/정의 파일 통합
  • 관리자 페이지의 변화
  • Data Access API의 변화

 

Prisma DB Proxy 선택사항

https://www.prisma.io/blog/announcing-prisma-2-zq1s745db8i5

Prisma1에서는 Prisma Server 내 Migration이 강제적으로 이행되었는데, 

Prisma2에서는 Lift를 사용하여 선택적인 사항이 될 수 있도록 변경되었습니다.

 

 

 

Front + Back Integration

Prisma1과 Prisma Framework(이하, Prisma2)의 가장 큰 차이점은

서버 아키텍처(스택) 구성 자체가 기존과는 다른 차이점을 보여주는데,

 

Prisma에서는 graphql-server가 prisma 백엔드 서버와 별도로 분리되어,

프론트엔드 서버를 구축하는 dog노답 서버 구성을 유지하였는데요...!

 

https://www.codemochi.com/blog/2019-06-26-prisma-2-sneak-peak

기존 Prisma1의 아키텍처를 보시면, Prisma Server와 Back-End Server가 별도로 2개가 존재하였었는데,

Prisma2에서는 두 서버가 하나로 통합되며,

migrations만 별도로 행하는 Lift 프로젝트가 분리된 것을 볼 수 있습니다.

Back-end와 Prisma Server를 통합하여 이 역할을 Photon 프로젝트가 진행하며,

Database와 양방향 통신을 합니다.

 

 

 

 

구성/정의 파일 통합

Prisma2에서는 Front-end(앞단) 부분이 번들링 되어 Back-end(뒷단) 서버와 함께 동작합니다.

외에 구성 파일에서도 약간의 변화가 있었는데, Prisma1에서는

  • prisma.yml: Prisma서버 구성 파일
  • datamodel.prisma: 데이터베이스 스키마 정의 파일

 

위 와 같이 2개의 파일로 하여금 데이터베이스와 Prisma Server를 구성하는 모습을 보여주었습니다.

Prisma2에서는 이를 통합하여 schema.prisma라는 파일로 통합되었습니다.

 

 

Prisma에서 제공되는 starter-kit을 사용하여 살펴보았는데

generator photon {
  provider = "photonjs"
}

datasource db {
  provider = "mysql"
  url      = "mysql://root:test1234@localhost:3306/learn_test"
}

model User {
  id    String  @default(cuid()) @id
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        String   @default(cuid()) @id
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  published Boolean  @default(false)
  title     String
  content   String?
  author    User?
}

photon이라는 처음 보는 친구와 database의 정보 고스란히 담겨 있습니다.

그리고 기존 datamodel.prisma에서 작성하던 모델 스키마도 함께 포함되어 있는 것을 볼 수 있습니다.

 

 

공식 블로그에 언급된 내용을 확인해보면,

Prisma2에서는 Data Modeling Syntax에 대한 자동 완성 기능과 하이라이트 등을 제공해주는

vscode extension-plugin(확장 플러그인)이 포함되었다고 합니다.

 

vscode에 등록된 prisma 확장플러그인

 

plugin에서 언급되는 새로운 데이터 모델 구문 정보는 아래 문서에서 확인할 수 있습니다.

https://github.com/prisma/prisma2/blob/master/docs/data-modeling.md

 

prisma/prisma2

DB toolkit to query, model and migrate your data. (Prisma replaces ORMs and other database tooling.) - prisma/prisma2

github.com

 

 

 

 

 

 

관리자 페이지의 변화

 

https://www.prisma.io/blog/prisma-2-is-coming-soon-mwwfhevie993

Prisma2에서는 Front-End에서도 많은 변화를 보여주었는데요!

기존 Prisma1의 관리자 페이지가 커뮤니티에서 많은 인기를 끌어, Prisma2에서는 이것을 좀 더 개선하여

어떠한 데이터베이스에서도 연결할 수 있는 Desktop Application으로도 이용 가능하도록 한다고 합니다.

 

위 스크린샷을 보면 필터링도 깔끔하게 추가된 모습을 볼 수 있네요.

하지만 기존 Prisma 1.34 Admin Page에서는 관계형 데이터베이스를 connect 시킬 때 save가

안 되는 오류가 있었는데 해당 문제도 개선하였을지는 모르겠네요.

 

 

 

 

Photon

Prisma2의 가장 큰 관심사는 아무래도 계속해서 밀고 있는 Photon과 Lift가 아닐까 싶은데요

Photon은 한 줄 요약해보자면

"기존 prisma client를 대체하여 새롭게 고안된 Data Access API"

 

Prisma1을 안 써보셨다고요?! 

Django를 기준으로 해보면 Django ORM을 대체하기 위해 고안된 기술이 Prisma Client API였고

Prisma Client API를 대체하기 위해 고안된 기술이 바로 Photon.js입니다.

 

 

Photon에 대한 기술문서는 이곳에서 확인해 볼 수 있습니다.

Lift를 사용하지 않고 Photon만 사용하는 방법 => https://github.com/prisma/prisma2/blob/master/docs/photon/use-only-photon.md

 

prisma/prisma2

DB toolkit to query, model and migrate your data. (Prisma replaces ORMs and other database tooling.) - prisma/prisma2

github.com

 

 

 

Lift

Lift도 요약해보자면 

"기존 Migrations을 별도로 분리한 Prisma2의 Scheme Migrations Toolkit"

Migrations가 별도로 분리되면서, 두 가지를 별도로 관리할 수 있어 굉장히 유용해진 아키텍처 구성이 되었습니다.

 

 

Photon을 사용하지 않고 Lift만 사용하는 방법 => https://github.com/prisma/prisma2/blob/master/docs/lift/use-only-lift.md

 

prisma/prisma2

DB toolkit to query, model and migrate your data. (Prisma replaces ORMs and other database tooling.) - prisma/prisma2

github.com

 

 

 

다음은 Starter-kit을 통해 Prisma2에 대해 더 알아보는 시간을 가져보겠습니다.

1 2 3 4