NestJS + typeORM + GraphQL 적용하기
시작하기
프로젝트를 시작하기 전에 이 글은 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
과 같은 두가지의 특별한 유형이 있다.Query
와Mutation
은 전혀 다른 부모의 유형을 가지고 있으며, Query
유형은 존재하지만 Mutation
는 존재 할 수도 있고, 존재 하지 않을 수도 있다.
GraphQL 스키마에 있는 대부분의 정의는 ObjectType이며 다음은 ObjectType, DTO(Data Transfer Object), class-validator을 상호작용한 Mutation을 정의 해보았다.
TypeORM Migrate
데이터베이스에 마이그레이션
// do somthing…
결론
아직까진 NestJS 활용에 많이 미숙하지만 지금까지 경험 해본바로는 정말 매력적인 프레임워크 인 것 같다.
추가적으로 NestJS에 대해 깊게 R&D를 해볼 생각 이다.
감사합니다!! 🧑💻