NestJS - 기초 구조 / graphQL 본문
미래의 나에게
nestJS 설치
npx @nestjs/cli new 폴더이름
graphql 설치
yarn add @nestjs/graphql @nestjs/apollo graphql apollo-server-express
라이브러리 & 프레임워크
라이브러리 - 다른 사람들이 만들어 놓은 기능 (작은 기능)
프레임워크 - 라이브러리들이 모여있는 도구 모음
언어별 대표적 프레임 워크 (각 프레임워크는 의존성 주입(DI)을 지원한다.)
- 자바 : 스프링
- 파이썬 : 장고
- 자바스크립트 : NestJS
NestJS
nest.js 는 효율적이고 확장 가능한 node.js 서버를 구축하기 위한 프레임워크다.
자바스크립트와 타입스크립트 모두 호환이 가능하며,
OOP(객체 지향프로그래밍), FP(함수형 프로그래밍), FRP(함수형 반응형 프로그래밍)을 지원하고,
데이터베이스, ORM, 유효성 검사 등 수많은 기능을 기본 제공한다.
* NestJS는 추가로 express(웹 서버 생성 라이브러리) 를 기반으로 만들어졌다.
(기존 node.js에서는 무언가 한 가지 기능을 사용하기 위해서는 하나의 라이브러리를 다운받아야 했는데, 그렇지 않아도 된다니 기쁘다.)
(설치 명령어 npx @nestjs/cli new 폴더이름)
다운을 받으면 다음과 같은 폴더들이 생성되는데, 이와 같은 초기 폴더 구조를 보일러 플레이트라고 한다.
보일러 플레이트 내 폴더들의 각 기능들
NestJS 의 기초적인 구조
구조는 MVC 패턴과 유사한 모습을 보인다. (module > resolver(controller) > service)
그리고 이는 modules 에서 DI(의존성 주입)을 하고 있는데, 이에 대해 기억하면 좋을 듯하다.
NestJS와 graphQL 연결
graphQL과의 연결은 최상위 모듈인 app.module에서 연결한다.
공식 문서에 친절하게 하는 방법이 나와있는데, 해당 코드를 첨부해 둔다.
(하지만, 직접 작성하면 따로 import하지 않아도 된다.)
// app.module.ts
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import { AsdModule } from './innight/night.module'; // 자동으로 추가된 모듈
@Module({
imports: [
AsdModule, // import 받아올 모듈 이름
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: 'src/common/graphql.gql', // 스키마 자동 저장을 위한 파일 경로 설정
}),
],
})
export class AppModule {}
위와 같이 작성해주면 playground 에서 자동으로 graqhQL 이 작성된 모습을 확인할 수 있다.
NestJS 의 장점
- 먼저, 자바스크립트 & 타입스크립트와 호환이 모두 가능하기 때문에 해당 언어에 익숙한 사람이라면 사용하기 편리하다는 점과,
- 타입스크립트의 장점을 가지고 있어 개발 시 야기될 수 있는 에러를 미연에 방지할 수 있기에 안정적이며,
- 개발하기 위해 자주 사용하는 기능이 대부분 NestJS에 내장되어 있어, 라이브러리를 통해 다운받아야 하는 불편이 적을 뿐 아니라,
- 아키텍쳐(프로젝트 구성 및 동작 원리)가 정의되어 있어 개발자들 간의 협업하기에 효율적이다.
NestJS와 Express 와의 비교
앞서 NestJS는 Express 를 기반으로 만들어졌다고 했지만, NestJS와 Express 는 상호 비교 대상이 될 수 있다.
경험으로 미루어보아, node.js 를 사용하며 여지껏 사용했던
Express 의 경우는 자유도가 너무 높아 필요한 라이브러리를 직접 다운로드받고 활용했지만,
말 그대로 필요한 라이브러리만 다운받기 때문에 서버가 상대적으로 가볍게 구동된다는 특징을 가진다.
NestJS 의 경우는 아키텍쳐가 통일되어 구성과 동작 원리를 쉽게 파악할 수 있고
개발에 자주 사용하는 기능들이 내장되어 있지만,
상대적으로 가벼운 서버 운용에 활용하기 보다는 대규모 프로젝트에 어울린다는 특징을 가진다.
'개발 > node.js' 카테고리의 다른 글
node.js & graphQL (0) | 2023.04.11 |
---|---|
ORM / Sequelize & typeORM (0) | 2023.01.29 |
node.js - about TypeScript (타임스크립트) (0) | 2023.01.25 |
node.js - graphQL : Schema-first vs Code-first (0) | 2023.01.24 |
node.js - 스크래핑(scraping) / 크롤링(crawling) (0) | 2023.01.21 |