본문 바로가기

# GraphQL/TypeGraphQL

(6)
# GraphQL/TypeGraphQL [TypeGraphQL] 상속, Inheritance 상속 TypeGraphQL에서는 extends키워드를 통해 기존 타입을 상속받아 사용할 수 있습니다. 여기서는 아래의 3가지 관점에서 상속을 활용하는 방법을 설명하겠습니다. 주요 관점: 베이스 타입이 일반 클래스인 경우 베이스 타입이 추상 클래스인 경우 오버라이딩된 필드는 어떻게 되나? 일반 클래스 상속 위에서 이미 설명하였듯이, 평범하게 extends키워드를 사용하면 기존 타입을 확장할 수 있습니다. 예를 들어, 아래와 같이 2차원 좌표를 표현하는 ObjectType을 정의하면. @ObjectType() class Point2D { @Field(() => Int) x!: number; @Field(() => Int) y!: number; }상속을 사용하여 3차원 좌표로 쉽게 확장할 수 있습니다. @Ob..

2020. 7. 4. 13:37

# GraphQL/TypeGraphQL [TypeGraphQL] @EnumType 열거형 TypeGraphQL은 @EnumType 데코레이터를 통해 타입스크립트의 enum을 GraphQL EnumType으로 정의할 수 있습니다. 1. TS에서 enum 정의하기 먼저 TypeScript에서 열거형을 정의합니다. // // implicit value 0, 1, 2, 3 enum CounterCommand { UP, // 0 DOWN, // 1 } // // or explicit values enum CounterCommand { UP = "up", DOWN = "down", } 2. 열거형 등록 registerEnumType를 사용하여 열거형을 등록합니다. import { registerEnumType } from "type-graphql"; registerEnumType(CounterC..

2020. 6. 18. 12:19

# GraphQL/TypeGraphQL [TypeGraphQL] Scalar 스칼라 TypeGraphQL에서는 스칼라라는 이름으로 유저가 직접 Primitive Type을 정의하여 사용할 수 있습니다. 여기서는 RGB라는 스칼라 타입을 만들어보겠습니다. 1. 내부표현, 외부표현 설계하기 먼저 RGB 타입을 어떻게 디자인할지 생각해야 합니다. 여기서 내부적인 표현이란 구현, 외부적인 표현이란 직렬화에 관련됩니다. 사용자는 외부적인 표현을 사용하여 데이터를 표현하고, 서버는 외부적인 표현을 내부적인 표현으로 변환(파싱)하여 사용합니다. 먼저, 내부적으로는 다음과 같이 디자인하면 될 것 같습니다. class RGB { r: number; g: number; b: number; toHex(): string; static fromHex(hex: string): RGB; static fro..

2020. 6. 14. 20:13

# GraphQL/TypeGraphQL [TypeGraphQL] @InputType, @ArgsType 노드의 분류 GraphQL에서는 요청과 응답을 기준으로 노드의 타입을 크게 2가지로 나눌 분류할 수 있습니다. InputType OutputType ObjectType OutputType은 사용자에게 데이터를 반환활 수 있는 타입이며, ObjectType을 포함한 Primitive Value 및 Scalar Type이 포함됩니다. InputType 반대로 InputType은 사용자가 데이터를 전달할 수 있는 타입이지만, OutputType같이 종류의 집합이 아니라 ObjectType처럼 단일로 존재할 수 있는 노드입니다. ObjectType이 여러 필드를 묶어놓듯이 InputType은 여러 아규먼트를 묶습니다. TypeGraphQL에서 InputType을 생성하려면 다음 데코레이터 중 하나를 사용해야 합..

2020. 6. 13. 20:18

# GraphQL/TypeGraphQL [TypeGraphQL] 기본 자료형과 @ObjectType 오브젝트 타입 ObjectType은 GraphQL에서 데이터 객체를 표현하는 단위이며, 데이터베이스로 비유하면 Relation의 개념에 가깝습니다. ObjectType은 서로다른 ObjectType와 관계를 맺을 수 있기 때문에, 수 많은 오브젝트 타입들이 엉키고설키면 마치 그래프와 같은 모양새가 나오게 됩니다. GraphQL이라는 이름이 붙은 이유도 이와 비슷할 것 입니다. @ObjectType 클래스 위에 @ObjectType() 데코레이터를 붙이면 클래스를 ObjectType으로 만들 수 있습니다. 마찬가지로 필드 위에 @Field() 데코레이터를 붙이면 Field of ObjectType로 만들 수 있습니다. 아래의 SDL을 클래스로 표현하면 다음과 같습니다. type Book { title: S..

2020. 6. 8. 18:48

# GraphQL/TypeGraphQL ApolloServer + TypeScript + TypeGraphQL 조합으로 GraphQL 서버 시작하기 TypeGraphQL TypeScript와 GraphQL을 함께 사용하려고 한다면 TypeScript가 생산성을 감소시키는 복병이 될 수 있습니다. 편하게 작업하려고 도입한 TypeScript가 오히려 개발을 어렵게 만들다니. 이게 어떻게 된 걸까요? 타입 불일치 문제는 SDL과 Actual Type이 일치하지 않을 때 발생합니다. Int라고 써놓고 String으로 읽는다거나 nullable을 빼먹는다거나... 문제는 이런 상황이 의외로 흔하고, 에러가 발생하기 전까지는 눈치채기도 어렵다는 것 입니다. // SDL type book { title : String! price : Int } // TypeScript class book { title : string; price : number; //< ty..

2020. 6. 7. 22:45