👩🏻‍💻 TIL

프리즈마, 그래프큐엘의 yarn codegen

ji-hyun 2022. 2. 21. 19:01

model Profile {

  id      Int     @id @default(autoincrement())

  bio     String

  user    User    @relation(fields: [userId], references: [id]) ◀️ profile에 연결된 user입니다.

  userId  Int       외래키 ◀️(userId)입니다.

}

 

 

 

@relation

Database상 FOREIGN KEY/REFERENCES에 매칭되는 속성입니다.
model상 외래키로 설정 할 필드와, 다른 모델의 PRIMARY KEY를 인수로 가집니다

 

 

 

@relation 의 예시

https://www.prisma.io/docs/concepts/components/prisma-schema/relations 사진 참고

 

relation 는 프리즈마 스키마에서 두 모델 간의 연결입니다.

예를 들어, 한 사용자가 여러 블로그 게시물을 가질 수 있기 때문에 User 와 Post 사이에는 일대다 관계가 있습니다.

 

 

-----------------------------------------------------

model User {

  id    Int    @id @default(autoincrement())

  posts Post[]

}

-----------------------------------------------------

model Post {

  id       Int  @id @default(autoincrement())

  author   User @relation(fields: [authorId], references: [id])

  authorId Int // relation scalar field  (used in the `@relation` attribute above)

}

-----------------------------------------------------

 

 

Two relation fields: 

author and posts. 

Relation fields define connections between models at the Prisma level and do not exist in the database. These fields are used to generate the Prisma Client.

 

 

 

< 뭔소리.... 내가 그냥 해석한다 >

관계 필드들은 프리즈마 레벨에서 모델 사이의 연결을 정의한다. db 에는 존재하지 않는다.

이 필드들은 프리즈마 클라이언트를 생성하는데 사용된다.

 

 

 

 

<프리즈마 클라이언트의 관계>

프리즈마 클라이언트는 프리즈마 스키마에서 생성됩니다.

다음 예는 프리즈마 클라이언트를 사용하여 레코드를 가져오고 생성하고 업데이트할 때 관계가 어떻게 나타나는지 보여줍니다.

 

 

 

1. 다음 쿼리는 user 레코드와 두개의 연결된 post 레코드들을 만듭니다.

 

const userAndPosts = await prisma.user.create({

  data: {

    posts: {

      create: [

        { title: 'Prisma Day 2020' }, // Populates authorId with user's id

        { title: 'How to write a Prisma schema' }, // Populates authorId with user's id

      ],

    },

  },

 

 

2.

다음 쿼리는 id가 20인 자동으로 generated 된 user 만들기

두개의 새로운 post 레코드들을 만들고, authorId 가 20 인 것을 정의.

 

const getAuthor = await prisma.user.findUnique({

  where: {

    id: "20",

  },

  include: {

    posts: true, // All posts where authorId == 20

  },

});

 

 

 

외래키 정의

주문 테이블에서 사용자 아이디 정보를 활용해 사용자의 테이블의 정보를 찾을 수 있게 되었습니다. 

바로, 주문 테이블에서 존재하는 사용자 아이디 정보(기본키) 를 우리는 외래키라고 부릅니다.

 

 


yarn codegen

 

목적:

graphQL Code Generator 를 도입하여 클라이언트의 생산성을 높이고 유지보수를 쉽게 한다.

 

 

문제: 

클라이언트 서비스는 모두 타입스크립트를 사용해서 그래프큐엘 스키마에 대응되는 타입 또는 interface 를 선언하여 사용하고 있었다.

이때 그래프큐엘 스키마의 변경 또는 추가가 발생할 경우 클라이언트의 모든 서비스들은 type 또는 interface 를 재정의하거나 새롭게 정의해야 하는 문제가 있었다.

 

 

실습:

# 1. 작업 디렉터리 생성
$ mkdir graphql-code-gen-sample
$ cd graphql-code-gen-sample

# 2. 의존성 패키지 설치
$ yarn add grapqhl
$ yarn add -D @graphql-codegen-cli

# 3. 초기화 마법사 시작 (해당하는 설정 선택)
$ yarn graphql-codegen init

# 4. 설정이 완료되면 선택한 항목의 패키지를 설치한다.
$ yarn install

# 5. 설정할때 입력한 스크립트 실행명령어를 사용하여 generator 
$ yarn gen # gen의 경우 사용자의 선택에 따라 달라진다

 

 

 

 

 

 

codegen.yml 참고

 

https://ithub.tistory.com/354#recentEntries

 

 

 

 

 

 

 

 

 

'👩🏻‍💻 TIL' 카테고리의 다른 글

Express / middleware / router  (0) 2022.03.17
JavaScript / TypeScript fundamental  (0) 2022.03.16
2022_02_09_TIL  (0) 2022.02.10
기업협업에서 배운 것 정리  (0) 2022.01.17
GraphQL  (0) 2022.01.04