본문 바로가기

# GraphQL

(16)
# GraphQL/GraphQL.js 타입스크립트 GraphQL Scalar Type 클래스 스칼라 값이란? 순수한 데이터 값을 나타내며, 프리미티브primitive 자료형과 비슷하다고 볼 수 있습니다.정수 Int문자열 String불리언 Boolean소수형 숫자 Float아이디 ID 스칼라 값을 반환하는 필드는 더 이상 쿼리를 뻗어나갈 수 없기 때문에 리프 노드leaf node라고 부릅니다. 필드가 아니라 노드인 이유는, GraphQL 쿼리가 내부적으로는 트리구조로 표현되기 때문입니다. 사용자 정의 스칼라 Custom Scalar 프로그래머는 임의의 스칼라 타입을 만들 수 있습니다. 먼저 스키마 정의 언어SDL로 표현하면 다음과 같습니다. 다만, 이대로는 사용할 수 없으며 스칼라 값을 어떻게 표현하고 어떻게 해석할건지에 대한 로직이 필요합니다. 스칼라 타입에 로직을 할당하는 방법은 언어마다 다르..

2019. 12. 15. 23:21

# GraphQL/GraphQL.js 타입스크립트 GraphQL Enum Type 클래스 열거형 열거형에 대한 기본적인 설명은 생략합니다. SDL 스펙에서는 아래처럼 열거형을 선언할 수 있지만, 값은 리졸브되지 않는다는 점에 유의해야 하며, 구현체마다 리졸브 방식이 다릅니다. 아래는 이메일 열거형 타입을 타입스크립트로 구현한 예제입니다. let MailType = new GraphQLEnumType({ name: "MAIL", values: { NAVER: { value: "@naver.com" }, GOOGLE: { value: "@gmail.com" }, DAUM: { value: "@daum.net" } } }); 열거형 타입은 GraphQLObject를 요구하는 장소에 사용될 수 있습니다. 아래는 매개변수로 사용된 예제입니다. let query = new GraphQLObjectTyp..

2019. 12. 15. 21:04

# GraphQL/GraphQL.js 타입스크립트 GraphQL 재귀호출 recursion 재귀적으로 반환할 수 있을까? 어떤 상황에서는 재귀적인recursive 반환이 필요할 수 있습니다. 아래의 시나리오를 살펴봅시다. 위의 스키마 정의 언어SDL로 표현되는 재귀적 가산기가 있습니다. add로 숫자를 더할때마다 history에 추가되고, total은 지금까지의 모든 숫자를 더해서 반환해야 합니다. 예시 출력 : 이 가산기를 어떻게 GraphQL로 표현할 수 있을까요? (ERROR) 정의되기 전에 사용하지 마세요! 평범한 방법으로 adder를 만들려고 시도하면, 십중팔구 다음과 같은 에러가 뜹니다. Block-scoped variable 'adder' used before its declaration.ts(2448) 선언이 끝나고 사용하세요. Variable 'adder' is used bef..

2019. 12. 15. 20:28

# GraphQL/GraphQL.js 타입스크립트 GraphQL Resolve Parameter 정보 Resolve 함수의 파라미터 정보 리졸브 함수의 파라미터는 다음과 같습니다.parent: any 부모 오브젝트 타입에서 반환된 객체. args : any 현재 오브젝트 타입의 args에 명시된 파라미터의 값 context : Context 오브젝트 타입들이 읽고/쓸수있는 공통객체. 대표적으로 활용되는 상황은 세션의 값. info : GraphQLResolveInfo 현재 리졸브 단계에 대한 자세한 정보가 들어있음. parent? args? 먼저 요약하자면, 현재 오브젝트 타입의 args에 명시된 내용이 args로 들어가고, 부모 오브젝트 타입이 리턴한 내용이 parent로 들어갑니다. 예시를 살펴봅시다. let book = new GraphQLObjectType({ name: "book", fields..

2019. 12. 15. 18:44

# GraphQL/GraphQL.js 타입스크립트 GraphQL Input Object Type 클래스 필드에 Args 전달하기 필드에 args 속성을 기술하면 매개변수를 사용할 수 있으며, 매개변수는 resolve에서 2번째 인자로 전달됩니다. let tuple = new GraphQLObjectType({ name: "tuple", fields: { x: { type: GraphQLString }, y: { type: GraphQLInt } } }); let query = new GraphQLObjectType({ // name pattern // ^[_a-zA-Z][_a-zA-Z0-9]*$ name: "pass_argument_query", description: "필드에 매개변수를 전달한다.", fields: { pass: { type: tuple, args: { x: { type: GraphQLS..

2019. 12. 14. 17:39

# GraphQL/GraphQL.js 타입스크립트 GraphQL Union Type 클래스 GraphQL Union Type GraphQL Union Type은 여러 오브젝트 타입을 하나의 그룹으로 만든것과 같습니다. 인터페이스interface와 다른점은 각 오브젝트 타입이 전혀 별개라는 점입니다. 인터페이스 타입을 구현한 각각의 오브젝트 타입은 서로 공통 필드common field를 가지고 있지만, 유니온은 그렇지 않습니다. 먼저 오브젝트 타입부터 만들어볼까요?type Human { givenName: String! famillyName: String! } type Elf { firstName: String! middleName: String! lastName: String! } GraphQL에서 사용하는 스키마 정의 언어schema defined language로 유니온을 표현하려면 아래의..

2019. 12. 14. 17:27

# GraphQL/GraphQL.js 타입스크립트 GraphQL Interface Type 클래스 GraphQL Interface Type GraphQL Interface Type은 오브젝트 타입object type의 공통적인 필드와 반환형을 알려줍니다. 유니온union과 다른점은 모든 오브젝트 타입이 공통 필드common field를 가지고 있다는 점입니다. GraphQL에서 사용하는 스키마 정의 언어schema define language로 인터페이스를 표현하려면 아래의 방식을 따릅니다. 캐릭터 인터페이스 타입 : 이 인터페이스 타입을 구현한 객체 타입들은 firstName이라는 필드를 구현해야 합니다. 그 외에는 자유롭고, 자신만의 필드도 가질 수 있습니다. 캐릭터 인터페이스를 구현한 타입 : type Human implements Character { firstName: String! last..

2019. 12. 14. 16:55

# GraphQL/GraphQL.js 타입스크립트 GraphQL Object Type 클래스 오브젝트 타입 GraphQL Object는 필드라는 단위로 구성되어 있으며, 클래스와 유사한 성질을 가지고 있습니다. 예를 들어 bookType 이라는 오브젝트 타입을 정의하는 스키마 정의 문법(SDL)을 생각해보겠습니다. 이것은 다음 타입스크립트 문법으로 표현될 수 있습니다. // TypeScript. const bookType: GraphQLObjectType = new GraphQLObjectType({ name: "bookType", fields: { title: { type: GraphQLString }, author: { type: GraphQLString } } });bookType 이라는 오브젝트 타입은 생성되었지만 아직은 사용할 수 없습니다. 이것은 말 그대로 타입에 불과하기 때문에 실제..

2019. 12. 11. 17:33