본문 바로가기

백엔드/Prisma + GraphQL

Prisma2 클라이언트 생성

Prisma2 CLI를 사용하여 데이터베이스 테이블 생성 포스트에서 데이터베이스에 테이블을 생성했지만, 코드상에서는 Prisma 클라이언트를 사용해서 데이터베이스에 접속하기 때문에, Prisma 모델 구조를 알고 있는 Prisma 클라이언트도 생성해 주어야 합니다.

참조

Prisma 클라이언트 생성

콘솔창에 다음 명령어를 입력하면, Prisma CLI가 Prisma 모델(schema.prisma)로 부터 Prisma 클라이언트를 생성합니다.

npx prisma generate

참조: Prisma2 설치 (CLI, 클라이언트)

 

하지만 Prisma 클라이언트를 생성할 때 유의해야 할 점이 있습니다!

schema.prisma

GraphQL 서버는 AWS 람다에서 작동합니다. 리눅스 환경이죠. 저는 윈도우 환경에서 개발하고 있습니다. 

참조: 서버리스 GraphQL 백앤드 구성

 

그런데 Prisma2 클라이언트는 바이너리로 컴파일되기 때문에, binaryTargets"native"로 설정하고, 윈도우 환경에서 Prisma 클라이언트를 생성하면, 윈도우 환경에서 동작하는 Prisma 클라이언트가 생성됩니다.

serverless-offline 플러그인을 사용해서 로컬(윈도우)에서 테스트할 때는 정상적으로 동작하지만, 이 상태 그대로 배포한다면, AWS 람다에서는 동작하지 않습니다.

참조: 서버리스 GraphQL 백앤드 구축


API 게이트웨이를 통해 AWS 람다를 실행시켜 보면 "rhel-openssl-1.0.x" 관련 오류를 반환할 것입니다. 

크로스 컴파일러 버그인지는 모르겠지만, 윈도우 환경에서 binaryTargets"rhel-openssl-1.0.x"로 설정해서 Prisma 클라이언트를 생성한 다음 배포해도 비슷한 오류가 발생합니다.

따라서 리눅스 환경에서 Prisma 클라이언트를 생성한 다음 AWS 람다에 배포해 주어야 합니다!!

// 데이터베이스 설정
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

// Prisma 클라이언트 설정
generator client {
  provider = "prisma-client-js"
  binaryTargets = ["rhel-openssl-1.0.x"]
  //binaryTargets = ["native"]
}

model User {
  ...
}

model Post {
  ...
}

...

리눅스 설치 후 배포

가상머신이나 듀얼 부팅을 사용할 필요는 없습니다.

윈도우10부터 마이크로소프트 스토어에서 간편하게 리눅스를 설치할 수 있습니다. 

마이크로소프트 스토어에서 리눅스 우분투 설치

serverless-offline 플러그인을 사용해서 테스트 완료 후(참조: 서버리스 GraphQL 백앤드 구축), 배포할 때는 윈도우에서 git push하고, 리눅스에서 git pull한 다음에 Prisma 클라이언트를 생성 후 배포합니다.

윈도우에서 실행된 리눅스 우분투