GraphQL

    nestjs-query_02_Hook, Authorize

    nestjs-query_02 1. BeforeCreateOneHook, BeforeUpdateOneHook nestjs-query에서는 몇 가지 훅들을 제공한다. 그중 가장 대표적으로 BeforeCreateOneHook과 BeforeUpdateOneHook이다. 해당 훅들은 module에서 자동으로 만들어 주는 CreateOne, UpdateOne 전에 실행되게 사용할 수 있는 기능이다. resolver에 도달하기 전에 실행되기 때문에 nestjs의 interceptor라고 봐도 된다. 2. 사용법 2-1. BeforeCreateOneHook 사용법 아래 보이는 것처럼 BeforeCreateOneHook를 사용해 구현할 수 있다. instance는 자동 생성되는 createOne의 input query를..

    nestjs-query_01_세팅

    nestjs-query nestjs-query는 graphql의 crud를 자동으로 만들어주고 기타 기능들을 제공해주는 라이브러리다. 기존 graphql의 경우 손쉽게 서버를 구성하고 사용할 수 있었지만 querying, sorting, paging기능을 구현하고, dto와 같은 타입들을 모두 지정해줘야 하기 때문에 중복된 일을 하는 경우가 많았다. nestjs-query는 이런 문제들을 단순 설정을 통해 쉽게 세팅할 수 있게 해준다. 1. @ptc-org/nestjs-query 구글에 nestjs-query를 치면 https://doug-martin.github.io/nestjs-query/ 이 주소가 제일 상단에 나온다. 해당 라이브러리는 0.3버전 이후 업데이트가 멈춰진 상태이기 때문에 https:..

    Nest + Graphql 구현하기

    Nest + Graphql 구현하기

    Nest + Graphql + Mongoose 최근에 Express환경에서 Graphql을 구현할 일이 있었다. 원하는대로 완성은 했지만 자유도가 높은 Express 환경에서 구현하다보니 원하는 아키텍처를 구현하는데 어려움(+ 귀찮음)이 있었다. 그래서 이번엔 어느정도 아키텍처가 세팅되어있는 Nest 환경에서 Graphql을 구현해보려고 한다. Express + Graphql에서 나타났던 문제들 첫 번째로 타입 중복선언과 두 번째로 의존성 주입패턴이 있다. 타입 중복선언은 graphql의 typeDef 선언과 DB schema가 따로 선언되는 문제였고, 의존성 주입패턴은 Express에서 구현하다보니 DI나 IoC의 개념들도 직접 구현해줘야 하는 문제들이었다. 하지만 해당 문제들은 Nest에서 기본으로 ..

    Express + Graphql 좀 더 구조적으로 짜기 (+ Type-graphql, Typegoose, Typedi)

    Express + Graphql 좀 더 구조적으로 짜기 (+ Type-graphql, Typegoose, Typedi)

    Express + Type-graphql + TypeDi + Typegoose 회사에서 Graphql을 사용할 일이 있어서 가볍게 Express에서 구현하려고 했었다. 공식문서와 구글링으로 기초적인 세팅과 구현은 완료해서 사용에는 문제가 없었지만, 타입 중복선언과 의존성 주입 부분에서 신경쓰이는 것들이 있어 해당 부분들을 해결하다보니 Express에 Type-graphql, TypeDi, Typegoose를 사용하게 되었다. 1. 타입 중복선언 일반적인 Graphql의 경우 입력이나 리턴되는 값들의 타입을 지정해줘야 한다. 보통 아래와 같이 typeDef를 선언해 할당해 준다 const typeDefs = gql` type User { loginId: String userId: String name: S..

    TypeScript로 GraphQL 사용할 때의 문제

    TypeScript로 GraphQL 사용할 때의 문제

    TypeScript로 GraphQL 사용할 때의 문제 문제 graphQL은 gql을 사용해 graphQL에서 사용할 데이터의 타입을 다음과 같은 형태로 지정해줘야 한다. (숫자는 Int, 문자열은 String) 사실 이것만 생각하면 별 문제가 없지만 TypeScript와 (or TypeORM) 함께 사용하게되면 귀찮은 일이 발생한다. 바로 TypeScript와 graphQL의 타입 형태가 다르다는 점이다. // graphQL에서의 타입 정의 type User { id: ID! userId: Int name: String email: String company: String } // TypeScript에서의 타입 정의 interface User { id: string; userId: number; name..