Prisma

Prisma

Prisma는 데이터베이스를 GraphQL API로 바꾸고 GraphQL을 모든 데이터베이스의 범용 쿼리 언어로 사용할 수 있도록 합니다. SQL을 작성하거나 NoSQL API를 사용하는 대신 GraphQL을 사용하여 데이터베이스를 쿼리 할 수 있습니다. 이 장에서는 Prisma에 대해 자세히 다루지 않으므로 웹 사이트를 방문하여 features가 무엇인지 살펴보십시오.

warning 알림 이 기사에서는 Prisma를 Nest 프레임 워크에 통합하는 방법을 학습합니다. 우리는 이미 GraphQL 개념과 @nestjs/graphql 모듈에 익숙하다고 가정합니다..

Dependencies

먼저 필요한 패키지를 설치해야합니다.

$ npm install --save prisma-binding

Setup Prisma

Prisma로 작업하는 동안 자신의 인스턴스를 호스팅하거나 Prisma Cloud를 사용할 수 있습니다. 이 소개에서는 Prisma가 제공하는 데모 서버를 사용합니다.

  1. Prisma CLI 설치 npm install -g prisma

  2. 새로운 서비스 prisma init를 만들고 데모 서버를 선택한 다음 지시를 따르십시오

  3. 서비스prisma deploy 배포

문제가 발생하면 Quick Start 섹션으로 이동하여 자세한 내용을 확인하십시오. 결국 프로젝트 디렉토리에prisma.yaml 설정 파일이라는 두 개의 새로운 파일이 나타납니다.

endpoint: https://us1.prisma.sh/nest-f6ec12/prisma/dev
datamodel: datamodel.graphql

자동으로 생성된 데이터 모델 datamodel.graphql.

type User {
  id: ID! @unique
  name: String!
}

warning 알림 실제 응용 프로그램에서는 더 복잡한 데이터 모델을 만듭니다. Prisma의 데이터 모델링에 대한 자세한 내용을 보려면 여기를 클릭하십시오.

prisma playground를 입력하면 Prisma GraphQL 놀이터를 열 수 있습니다.

Create the client

GraphQL API를 통합하는 몇 가지 방법이 있습니다. 일반적인 GraphQL 개발 워크 플로우를 위한 명령 줄 도구 인 GraphQL CLI를 사용합니다. GraphQL CLI를 설치하려면 다음 명령을 사용하십시오.

$ npm install -g graphql-cli

그런 다음 Nest 애플리케이션의 루트 디렉토리에 .graphqlconfig를 작성하십시오.

$ touch .graphqlconfig.yml

다음 내용을 넣으십시오.

projects:
  database:
    schemaPath: src/prisma/prisma-types.graphql
    extensions:
      endpoints:
        default: https://us1.prisma.sh/nest-f6ec12/prisma/dev
      codegen:
        - generator: prisma-binding
          language: typescript
          output:
            binding: src/prisma/prisma.binding.ts

Prisma GraphQL 스키마를 prisma/prisma-types.graphql로 다운로드하고 prisma/prisma.binding.graphql에서 Prisma 클라이언트를 작성하려면 터미널에서 다음 명령을 실행하십시오.

$ graphql get-schema --project database
$ graphql codegen --project database

Integration

거의 다됐습니다. 이제 Prisma 통합을 위한 모듈을 만들어 봅시다.

@@filename(prisma.service)
import { Injectable } from '@nestjs/common';
import { Prisma } from './prisma.binding';

@Injectable()
export class PrismaService extends Prisma {
  constructor() {
    super({
      endpoint: 'https://us1.prisma.sh/nest-f6ec12/prisma/dev',
      debug: false,
    });
  }
}

PrismaService가 준비되면 해당 모듈을 만들어야합니다.

@@filename(prisma.module)
import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Module({
  providers: [PrismaService],
  exports: [PrismaService],
})
export class PrismaModule {}

info 힌트 새로운 모듈과 서비스를 즉시 생성하기 위해 Nest CLI를 사용할 수 있습니다. PrismaModule 타잎을 만들기 위해서는 nest g module prisma 그리고 서비스를 위해서 nest g service prisma

Usage

새 서비스를 사용하기 위해 PrismaModule을 가져오고 PrismaServiceUsersResolver에 주입합니다.

@@filename(users.module)
import { Module } from '@nestjs/common';
import { UsersResolver } from './users.resolver';
import { PrismaModule } from '../prisma/prisma.module';

@Module({
  imports: [PrismaModule],
  providers: [UsersResolver],
})
export class UsersModule {}

PrismaModule을 가져 오면 UsersModule 컨텍스트에서 내 보낸 PrismaService를 사용할 수 있습니다.

@@filename(users.resolver)
import { Query, Resolver, Args, Info } from '@nestjs/graphql';
import { PrismaService } from '../prisma/prisma.service';
import { User } from '../graphql.schema';

@Resolver()
export class UsersResolver {
  constructor(private readonly prisma: PrismaService) {}

  @Query('users')
  async getUsers(@Args() args, @Info() info): Promise<User[]> {
    return await this.prisma.query.users(args, info);
  }
}

Example

약간 수정된 예제를 사용할 수 있습니다 여기.

Last updated