resolver & objectType

๊น€๋ฏผ์žฌยท2021๋…„ 11์›” 27์ผ
0

Nest.JS & graphQl

๋ชฉ๋ก ๋ณด๊ธฐ
2/7

*๐Ÿ”Study Keyword :

โœ…:GraphQLModule(Apollo server์— ๊ธฐ๋ฐ˜)๋กœ ๐Ÿ”‘Apollo server์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์„ธํŒ…์„ ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ

-apollo server์— ํ•„์ˆ˜์ ์œผ๋กœ 1>typeDefe์™€ 2>resolver๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
1>typeDefe๋ž€ document ํ˜น์€ ์šฐ๋ฆฌ์˜ ์„œ๋ฒ„์˜ schema๋ฅผ ํ‘œํ˜„ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
2>resolver๋ž€ query๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  mutate์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” function์„ ์˜๋ฏธํ•œ๋‹ค.

1. resolver ์ƒ์„ฑ ๊ณผ์ •


FLOWโ“

  1. nestjs g mo Restaurants
  • RestaurantsModule ์ƒ์„ฑํ•˜๊ธฐ
  1. nestjs g re Restaurants
  • RestaurantResolver ์ƒ์„ฑํ•˜๊ธฐ
  1. app๋ชจ๋“ˆ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
  • GraphQLModule.forRoot๋‚ด์— autoSchemaFile ์ž‘์„ฑ

app.module.ts ๋‚ด imports ๋œ GraphQLModule ๋ถ€๋ถ„

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: join(process.cwd(), 'src/schema.gql'), 
 // 1. ํŒŒ์ผ ๋‚ด์— ์ง์ ‘ ์Šคํ‚ค๋งˆ ํŒŒ์ผ ์ƒ์„ฑํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
      autoSchemaFile: true,
 // 2. ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์ง€๋งŒ ์ง์ ‘ ํŒŒ์ผ์„ ๊ฐ–๊ณ  ์žˆ์ง€ ์•Š๊ณ ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ 
 // ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์„  ํƒ
    }),
  ],
})
  • app๋ชจ๋“ˆ์— Imports์— RestaurantsModule ์ถ”๊ฐ€

app.module.ts

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { join } from 'path';
import { RestaurantsModule } from './restaurants/restaurants.module';
@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: true,
    }),
    RestaurantsModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}
  1. restaurants.module.ts ์ž‘์„ฑํ•˜๊ธฐ
  • providers์— ๋ฆฌ์กธ๋ฒ„ ์ถ”๊ฐ€ํ•˜๊ธฐ

restaurants/restaurants.module.ts

import { Module } from '@nestjs/common';
import { RestaurantsResolver } from './restaurants.resovler';
@Module({
  providers: [RestaurantsResolver],
})
export class RestaurantsModule {}
  1. restaurants.resolver.ts ์ž‘์„ฑํ•˜๊ธฐ
  • Resolver๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ƒ์„ฑ
  • Query ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(typeFunc๋ฅผ ๋ฐ›์Œ,์ฟผ๋ฆฌ๊ฐ€ ๋ฆฌํ„ดํ•˜๊ณ ์žํ•˜๋Š” ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š” function ํ˜•ํƒœ๋กœ ์ž‘์„ฑ) ์ƒ์„ฑ
    - Query ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ ๊ทธ๋ž˜ํ”„ ํ์—˜์„ ์œ„ํ•œ ๊ฒƒ(ํ•„์ˆ˜)์ด๋‹ค.
    • isPizzaGood ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธํ‹€ ์œ„ํ•œ ๊ฒƒ(์˜ต์…˜)์ด๋‹ค.

restaurants/restaurants.resolver.ts

import { Query, Resolver } from '@nestjs/graphql';
@Resolver()
export class RestaurantsResolver {
  @Query(() => Boolean)
  isPizzaGood(): boolean {
    return true;
  }
}

2. ObjectType

-entities๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ชจ๋ธ์„ ์˜๋ฏธํ•˜์—ฌ entity ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋ธ์„ ๋งŒ๋“  ๊ณผ์ •์ด๋‹ค.

entities/restaurants.entity.ts

  1. ๊ทธ๋ž˜ํ”„ ํ์—˜ ๊ด€์ ์— Restaurants ๋ชจ๋ธ์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
import { Field, ObjectType } from '@nestjs/graphql';
@ObjectType()
export class Restaurants {
  @Field((type) => String)
  name: string;
  @Field((type) => Boolean, { nullable: true })
  isGood?: boolean;
}
  • graphql ๋กœ๋ถ€ํ„ฐ ObjectType import ๋ฐ›๊ธฐ
  • Field ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ๋ฆฌํ„ดํƒ€์ž…ํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค.
    => ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๊ฐ€ Restaurant ObjectType์„ ์ƒ์„ฑํ•ด์ค€๋‹ค.
  1. entity์— ๋งž๊ฒŒ resolver์— Query ์ˆ˜์ •ํ•˜๊ธฐ
  • @Resolver์— ๋ ˆ์Šคํ† ๋ž‘ entity๋ฅผ ์ธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ๋ฉดํ˜„์žฌ ์ด Resolver๊ฐ€ Restaurants์˜ Resolver ์ž„์„ ๋ช…์‹œ(์˜ต์…˜)ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • @Query()์— ์ธ์ž๋กœ entity๋กœ ์ƒ์„ฑํ•œ Restaurants๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

restaurants/restaurants.resolver.ts

import { Query, Resolver } from '@nestjs/graphql';
import { Restaurants } from './entities/restaurants.entity';
@Resolver((of) => Restaurants)
export class RestaurantsResolver {
  // ์ด๋ ‡๊ฒŒ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€์‹ 
  // @Query(() => Boolean)
  // isPizzaGood(): boolean {
  //   return true;
  // }
  @Query((returns) => Restaurants)
  myRestaurant() {
    return true;
  }
}

*๐Ÿ’กconclusion

  • resolver์™€ objectType์€ nestjs์—์„œ graphql์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ์กด์žฌ์ด๋‹ค~

#๐Ÿ“‘Study Source

  • ๋‹ˆ๊ผด๋ผ์Šค ์Œค ์šฐ๋ฒ„์ด์ธ  ๊ฐ•์˜์ค‘:]
profile
์ž๊ธฐ ์‹ ๋ขฐ์˜ ํž˜์„ ๋ฏฟ๊ณ  ์‹ค์ฒœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€