NestJS + typeORM + GraphQL 적용하기

dev.dong won
5 min readFeb 16, 2021

--

combine GraphQL with typeORM using NestJS

시작하기

프로젝트를 시작하기 전에 이 글은 GraphQL Query와 Database는 PostgresQL(PSQL) 사용 하였고, NodeJS 데이터베이스 통합 라이브러리 TypeORM을 사용 했다!

NodeJS, Express, NestJS, ORM, GraphQL의 어느정도 사전 지식이 있다고 가정하고자 한다.

NestJS

NestJS는 서버 요구 사항을 충족하는 데 사용되는 프레임 워크이다.

TypeORM

TypeORM은 Postgres, SQL, MongoDB와 같은 데이터베이스에 함께 사용할 수있는 객체 관계형 매핑 도구이다 :)
Typescript를 기반으로 플랫폼 개발을 한다면 현재로써는 가장 완성도가 좋은 ORM인거 같다.
(다양한 플랫폼에 대해 호환성도 기대이상!! ⭐️)

GraphQL

API용 쿼리 언어 이며, Request가 트리거 되면 네트워크를 통해 데이터 흐름을 결정 한다.

SetUp

NestJS 설치

NestJS 시작은 생각보다 간단하다.
아래와 같이 글로벌 인스톨을 해주면 간단하게 새 프로젝트를 만들수 있다.

npm i -g @nestjs/cli
nest new {project-name}

GraphQL 적용

NestJS 프로젝트에서 GraphQL을 사용하려면 Apollo Server와 GraphQL 종속성 설치가 필요하다.

npm i @nestjs/graphql graphql-tools graphql apollo-server-express

패키지 인스톨이 완료 되면 아래와 같이 GraphQLModule을 가져와서 forRoot()라는 정적메소드를 쉽게 구성 할 수 있다.

첫번째 Resolver 추가

여기까지 NestJS + GraphQL 구성이 되었지만 테스트 해보려면 기본적으로 하나이상의 Query root type이 필요하다.

> Users라는 resolver를 추가한 예시

SQL 설치

해당 글은 맥OS에서 PostgresQL 설치 하였다.

각자 OS환경에 맞는 사용하고자 하는 SQL을 설치 하면 된다 👍

SQL (TypeORM) 연결

NestJS는 데이터베이스, ODM (Object Document Mapper) 또는 ORM (Object Relational Mapper)에 구애 받지 않고, 모든 데이터베이스와 통합이 가능 하다.

NestJS는 TypeORM 패키지를 깔끔하게 지원 해주고 있다.
아래와 같이 종속성 설치를 해주면 될 것 같다.

# pg 설치는 각자 상황에 맞는 SQL로 변경
npm install --save @nestjs/typeorm typeorm pg

종속성 설치가 완료되면 Database에 연결해주면 된다.

Class-Validator

NestJS는 class-validator와 호환성이 좋으며, 라이브러리를 통해 decorator기반 유효성 검사가 가능 하다.

npm i class-validator class-transformer

NestJS의 Global Pipe를 활용하여 전체 유틸리티의 모든 경로에 validation pipe를 실현 할 수 있다.

GraphQL 특수 유형

GraphQL에서는 Query, Mutation과 같은 두가지의 특별한 유형이 있다.
QueryMutation 은 전혀 다른 부모의 유형을 가지고 있으며, Query 유형은 존재하지만 Mutation 는 존재 할 수도 있고, 존재 하지 않을 수도 있다.
GraphQL 스키마에 있는 대부분의 정의는 ObjectType이며 다음은 ObjectType, DTO(Data Transfer Object), class-validator을 상호작용한 Mutation을 정의 해보았다.

TypeORM Migrate

데이터베이스에 마이그레이션
// do somthing…

결론

아직까진 NestJS 활용에 많이 미숙하지만 지금까지 경험 해본바로는 정말 매력적인 프레임워크 인 것 같다.
추가적으로 NestJS에 대해 깊게 R&D를 해볼 생각 이다.

감사합니다!! 🧑‍💻

--

--

dev.dong won
dev.dong won

Written by dev.dong won

가치있는 새로움을 찾고 새로움에 끊임없이 도전을 즐기며 실패속에 올바른 선택을 하여 성장하고자 하는 장동원 입니다

No responses yet