우리가 Prisma를 쓸 수 있을까?

이번에 회사에서 구 서비스 리뉴얼 프로젝트를 새로이 진행하고 있는데, 현재 기획 및 설계 단계인지라 Back-end 단에서 빠르고 쉽게 사용할 수 있는 프레임워크를 찾고 있었다.

이번에 회사에서 구 서비스 리뉴얼 프로젝트를 새로이 진행하고 있는데, 현재 기획 및 설계 단계인지라 Back-end 단에서 빠르고 쉽게 사용할 수 있는 프레임워크를 찾고 있었다.

그럼 ‘Prisma’ 한 번 써보시는 건 어때요?

다른 팀 동료분이 Back-end 서버 및 ORM으로 ‘Prisma’를 추천해주셔서 설계 기반으로 사용할 수 있을지 검토를 한 결과로 Prisma에 대해 알게 된 것들을 공유해본다. 한국어로 쓰인 자료를 한 번도 보지 못해서, 이 글이 조금이나마 도움이 됐으면 한다.


‘Prisma’는 무엇을 하는 녀석일까? 공식 문서에는 이렇게 정의하고 있다.

Prisma is a data layer that replaces traditional ORMs in your application architecture. (Prisma는 애플리케이션 구조의 전통적인 ORM을 대체하는 데이터 계층이다.)

Sequlize같은 ORM을 대체한다고 하는데, Data layer를 위한 코드 자체는 ORM과 크게 다르지 않다. 하지만 그것을 위한 설계 방식이 생소한데, Back-end 애플리케이션에도 Client라고 부르는 것이 존재한다는 것이다.

사실 우리는 Front-end 애플리케이션을 클라이언트라고 주로 부르고 있었는데, 여기서 모든 팀 멤버들의 혼란이 시작됐고, 공식 문서의 그림과 설명을 봐도 제대로 이해를 할 수가 없었다.

백엔드 프레임워크가 왜 클라이언트를 갖고 있어? 이거 브라우저에서 써야 하는 거 아니야?

결론만 말하자면 아니다. Prisma의 멤버가 이미 ‘브라우저에서 사용할 수 있는 Prisma Client를 만들자’라는 제안을 했더라.

우선 Prisma는 TypeScript 친화적이며, DB의 Schema와 Table들을 GraphQL SDL과 TypeScript의 타입 정의로 Import/Export 할 수 있는 기능이 있다. 이 기능을 통해 DB -> SDL 혹은 그 역으로 현재는 PostgreSQL/MongoDB만 지원하는 DB Migration이 가능하다고 한다.

Prisma는 크게 Prisma Client와 Prisma Server로 나뉜다.

Prisma Server는 Docker로 배포되어 docker-compose로 구동이 가능하며, 애플리케이션(Prisma Client)과 DB 사이에서 Proxy 역할을 한다. Prisma CLI를 통해 앞 문단에서 말했던 SDL Modeling과 DB Migration도 이 Prisma Server가 사용 가능한 상태일 때 가능하다. 이 서버는 GraphQL 서버를 기본으로 탑재하고 있어, 개발자가 따로 GraphQL 서버 구성을 해 줄 필요가 없다.

Prisma Client는 Prisma CLI가 자동으로 생성해주는 라이브러리 형식의 클라이언트이다. DB Model에 따라 자동으로 Type이 생성되어, Prisma Client가 ORM 형식으로 사용될 수 있도록 돕는다. 물론 미리 만들어진 SDL과 연동되어 GraphQL 그대로를 사용할 수도 있다.

따라서 서버 애플리케이션을 구성할 때, Business Logic을 작성하면서 DB 접근이 필요한 작업은 Prisma Client를 Import하여 사용해야 한다는 것이다.

추가로, Prisma Server는 Prisma에서 Prisma Cloud라는 제품을 제공하고 있어, 현재 사용 가능한 서버가 없다면 이 솔루션을 사용할 수 있을 것 같다.


부족한 지식으로 설명하느라 글이 많이 빈약해 보이는데, 일단 어렵다. 처음 보는 구조라서 그런 것인지, 정말로 어려운 것인지는 모르겠지만, 러닝 커브가 명백하게 가파르게 보여 빠르게 만들어야 하는 우리 일정 상 지금 적용은 무리라고 판단하여, 이번에는 Prisma를 사용하지 않기로 했다.

틀린 정보, 추가하고 싶은 정보가 있다면 댓글 부탁드린다.

Subscribe to Eric's Blog

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe