본문 바로가기

MBTI Project

Prisma를 통한 개발 인프라 구축 - Prisma와 node 서버 연동

728x90

Prisma가 제대로 설치되었다고 하더라도 직접 Prisma의 Admin Playground에 접속해서 조작할것이 아니므로

Prisma에서 관리하는 데이터베이스를 node와 연동해 주어야한다.

 

사실, 연동은 이미 되어있다.

 

쿼리에 대한 스키마와 리졸버만 작성해주면 잘 동작한다.

 

 

가장 간단한 스키마와 리졸버다.

 

그러나 현재 서버를 실행하면 에러가 날 것이다.

 

prisma 클라이언트가 생성되지 않았기 때문이다.

prisma의 다양한 api를 사용하기 위해서는 클라이언트를 생성해주어야 한다.

 

간단하게 prisma generator 라는 명령어를 통해 생성할 수 있다.

 

 

 

 

그러나 prisma generator 이후에도 에러가 난다.

 

 

마지막으로 각각의 폴더에 나누어져 있는 스키마를 하나의 모델에 다시 정의해주어야 한다.

 

아래와 같이 model.graphql 을 api 하위에 생성한다

(datamodel.prisma과 동일하나, @같은 다이렉티브를 빼주어야 한다.

jinho.dev/posts/graphql-directives/

 

Graphql Directives - Blog by Jinho Hong

Graphql Directives 란 무엇이고 왜 필요 할까요? GraphQL 위 글에서 보면 Directives 를 이렇게 설명 하고 있습니다. Directives provide a way to describe alternate runtime execution and type validation behavior in a GraphQL document.

jinho.dev

type User {
  id: ID! 
  username: String! 
	email: String!
	votes: [Vote]
}

type Vote {
	id: ID!
	title : String!
	description : String!
  upperVote:[Vote!]! 
  lowerVote:[Vote!]! 
	val1: String
	val2: String
	val3: String
	val4: String
	val5: String
	val6: String
	val7: String
	val8: String
	val9: String
	val10: String
	val11: String
	val12: String
	val13: String
	val14: String
	val15: String
	val16: String
	val17: String
	val18: String
	val19: String
	val20: String
}

type UserVote {
	id: ID!
	user:User!
	vote: Vote!
	voteSelect: String!
}

 

 

이는 graphql이 prisma로 만들어진 데이터베이스의 구조를 이해하도록 해준다.
(사실 이는 비효율적이다 단순히 컬럼 하나를 추가하는 작업도 2번 해주어야 하기 때문에)

 

 

 

여튼 model.graphql까지 만들고나면 localhost:4000에서 테스트해볼 수 있다.

 

위와같이 잘 돌아간다.

 

나머지 쿼리도 이렇게 연결해서 쓰면 된다.

 

오늘의 작업내용!

github.com/thekanon/MBTI-statistical-project/commit/0425fe710a2a23bad34dc5e08ebdc41f0241f676

 

Prisma와 node 서버의 연동작업 및 Prisma Client Generator 작업 · thekanon/MBTI-statistical-project@0425fe7

Analytics cookies We use analytics cookies to understand how you use our websites so we can make them better, e.g. they're used to gather information about the pages you visit and how many clicks you need to accomplish a task. Learn more Accept Reject

github.com

 

 

 

728x90