[typescript] Nest.js에서 타입스크립트로 GraphQL 서버 작성하기

Nest.js는 TypeScript로 작성된 프레임워크로, 강력한 기능과 모듈성을 제공합니다. GraphQL은 데이터를 효율적으로 관리하기 위한 쿼리 언어이자 런타임입니다. 이 블로그 포스트에서는 Nest.js를 사용하여 타입스크립트로 GraphQL 서버를 어떻게 작성할 수 있는지 살펴보겠습니다.

Nest.js와 GraphQL 설치하기

먼저 Nest.js 애플리케이션을 만들고 GraphQL을 설치해보겠습니다.

$ npm install --save @nestjs/core @nestjs/common @nestjs/platform-express graphql apollo-server-express

위 명령어를 통해 Nest.js와 GraphQL을 설치할 수 있습니다.

GraphQL 모듈 생성하기

Nest.js에서 GraphQL 모듈은 GraphQLModule을 사용하여 설정됩니다. 아래는 GraphQL 모듈을 설정하는 예제입니다.

import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [
    GraphQLModule.forRoot({
      autoSchemaFile: true,
    }),
    CatsModule,
  ],
})
export class AppModule {}

위 예제에서는 GraphQLModuleAppModule에 추가하고, autoSchemaFile 옵션을 설정하여 GraphQL 스키마를 자동으로 생성하도록 했습니다.

Resolver 작성하기

Resolver는 요청을 받아들이고 해당 쿼리에 대한 응답을 반환하는 역할을 합니다. 아래는 간단한 예제의 Resolver 코드입니다.

import { Resolver, Query } from '@nestjs/graphql';
import { CatsService } from './cats.service';

@Resolver('Cat')
export class CatsResolver {
  constructor(private readonly catsService: CatsService) {}

  @Query()
  async cats() {
    return this.catsService.findAll();
  }
}

위 코드에서 CatsResolvercats 쿼리에 대한 응답을 반환하는 역할을 합니다.

Schema 정의하기

GraphQL 스키마는 애플리케이션에 존재하는 데이터와 데이터 그래프 사이의 상호 작용을 정의합니다. Nest.js에서는 TypeScript 데코레이터를 사용하여 GraphQL 스키마를 정의합니다.

import { ObjectType, Field, Int } from '@nestjs/graphql';

@ObjectType()
export class Cat {
  @Field(type => Int)
  id: number;

  @Field()
  name: string;

  @Field()
  age: number;
}

위 코드에서는 Cat 객체에 대한 GraphQL 타입을 정의하고, 해당 타입에 대한 필드를 추가했습니다.

GraphQL 서버 시작하기

마지막으로 애플리케이션을 시작하고 GraphQL 서버를 실행해봅시다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

위 코드는 Nest.js 애플리케이션을 생성하고, 포트 3000에서 GraphQL 서버를 시작합니다.

이제 Nest.js를 사용하여 타입스크립트로 GraphQL 서버를 만드는 방법에 대해 알아보았습니다. Nest.js의 풍부한 기능과 GraphQL의 강력한 데이터 관리 기능을 활용하여 서버를 구축하는 과정을 살펴보았습니다.

더 자세한 내용은 Nest.js 및 GraphQL 공식 문서를 참고하시기 바랍니다.

Happy coding!