Nestjs는 왜 사용할까? 그리고 어떻게 grapql과 연동할까?

김진겸·2023년 1월 30일
0

2023.01.30(월)
nestjs를 왜 사용하고 어떻게 grapgql과 연동해야 하는지 알아보자.
nestjs를 왜 사용해야할까? 다른 라이브러리들을 모아서 사용하면 되는거 아닌가? 굳이 이걸 왜 써야하지?
사용해야하는 이유는 예를 들어 알아보자.

예)
개발자가 각각 api를 만들기로 했다.
서로의 성향과 성격이 다르고 각자의 스타일이 있기에 코드가 다 달라진다.
이런 경우 한명이 휴가를 나가거나 아프다면 누군가가 고칠수 있어야 하는데 고칠수 없다.
이러한 문제를 해결해주는게 nest.js이다

그리고 규모측면에서 큰규모에서는 express보다는 nestjs를 사용한다.
또 둘의 구분되는 점은 nestjs는 DI(Dpendcy injection)을 지원해 주지만 express는 지원해주지 않는다. 이러한 차이가 있다.
Nestjs에 express가 포함되어 있어 따로 설치할 필요가 없다. Nestjs는 모든것이 설치된 프레임워크라는 점을 알고 있자.
요즈음 javacript를 실무에서 많이 사용하기 때문에 nestjs를 많이 사용한다고 한다. 꼭 제대로 배워보자.

이제 grapql과 어떻게 연동하는지 알아보자.
grapql과 연동하기 위해 Nestjs의 공식문서를 찾아보자.
grapql과 연동하는 방법이 있는 부분이다 참고하자,Nestjs-graphql
간략한 흐름도
요청->main.ts->app.module.ts->startbucks.module.ts->startbucks.resolvers.ts->startbucks.services.ts
이순서로 접근하게 된다.

**startbucks.sevices.ts**
import { Injectable } from '@nestjs/common';

@Injectable()
export class StarbucksService {
  qqq(): string {
    return '스타벅스 커피 목록을 조회합니다.';
  }
}

@Injectable 이것의 의미는 의존성주입을 시켜준다는 의미이다.
StarbucksService 클래스를 만들어 의존성주입을 할 준비를 시켜준다.
그리고 이 클래스 안에 메소드를 만들어 resolver에서 실해시켜줄 준비를 한다.

**startbucks.resolver.ts**
import { Query, Resolver } from '@nestjs/graphql';
import { StarbucksService } from './Starbucks.services';

@Resolver()
export class StarbucksResolver {
  constructor(private readonly starbucksService: StarbucksService) {}

  @Query(() => String, { nullable: true }) //
  fetchStarbucks(): string {
    return this.starbucksService.fetchList();
  }
}

StarbucksResolver 이 클래스의 constructor함수에 StarbucksService의 새로운 인스턴스 starbucksService를 만들어 넣어준다. 이렇게 의존성 주입을 준비한다.

**startbucks.module.ts**
import { Module } from '@nestjs/common';
import { StarbucksService } from './Starbucks.services';
import { StarbucksResolver } from './Starbucks.resolver';

@Module({
  providers: [
    StarbucksResolver, //
    StarbucksService,
  ],
})
export class StarbucksModule {}

@Module()로 지금까지 만든 두 StarbucksResolver,StarbucksService 클래스를 가져온다.
@Module()에서 nestjs가 자동으로 의존성 주입을 해준다.

**app.module.ts**
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { StarbucksModule } from './apis/Starbucks/Starbucks.module';

@Module({
  imports: [
    StarbucksModule,
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'src/common/graphql/schema.gql',
    }),
  ],
})
export class AppModule {}

autoSchemaFile 이부분이 code-first로 nestjs에서 자동으로 schema를 만들어준다.

** main.ts**
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000, () => {
    console.log('서서서서서서서서버버버버버버버');
  });
}
bootstrap();

이부분에서 지금껏 만든 파일들을 종합해서 사용하게 된다.
최종적으로 서버를 열어주는 부분이다.

nestjs가 자동으로 해주지만 그렇게 되는 작동과정을 이해해야 한다.
데코레이터라는 새로운 함수 호출방식을 사용했지만 작동과정은 node.js를 사용할때와 비슷한것 같다.

한계단씩 수정해 나가자.

profile
성장에 목마른 입문자입니다!

0개의 댓글