본문 바로가기

배움의 즐거움/프로그래밍

(34)
(10) Graphql-ruby - 스키마 테스팅 Schema TestingGraphQL 스키마를 테스트할 여러가지 방법이 있다.스키마를 테스트 하지말고 객체를 대신 테스트해라GraphQL 쿼리를 실행하고 결과를 테스트해라 Don’t test the schemaGraphQL 스키마의 behavior을 테스트할 가장 쉬운 방법은 behavior을 따로 객체로 추출하여 해당 객체를 독립적으로 테스트 하는 것이다. 레일에서 컨트롤러 테스트로 모델을 테스트하지 않는다. 비슷하게 시스템의 "low-level" 파트를 자체적으로 테스트 할 수 있다. 예를 들어, 자기 자신의 값을 계산하는 필드를 보자.class PostType 100 end end 새로운 클래스를 만들어서 GraphQL 스키마에 적용함으로써 이를 개선할 수 있다.# app/models/post/t..
(9) Graphql-ruby - Generators Generators 만약에 Ruby on Rails 와 함께 GraphL을 쓰고 있다면, 다음과 같은 상황을 위해 제너레이터를 사용할 수 있다.setup GraphQL, GraphiQL, GraphQL::Batch, and Relayscaffold typesscaffold Relay mutationsscaffold GraphQL::Batch loaders graphql:installgraphql:install 키워드를 사용하여 Rails 앱에 GraphQL을 추가할 수 있다.rails generate graphql:install 해당 키워드는 다음과 같은 작업을 한다. app/graphql/ 폴더 구조 셋업스키마 정의 추가기본 타입 클래스들 추가쿼리 타입 정의 추가쿼리 실행을 위한 route와 컨트롤러 ..
(8) Graphql-ruby - Introspection Introspection GraphQL 스키마는 스키마의 구조를 보여주는 내장된 introspection system 시스템이 있다. 실제로, 이 introspection 시스템은 GraphQL을 이용하여 요청할 수 있다.{ __schema { queryType { name } } } # Returns: # { # "data": { # "__schema": { # "queryType": { # "name": "Query" # } # } # } # }이것은 GraphiQL editor 와 같은 GraphQL 툴을 이용하는데 사용된다. introspection system 기본적인 부분들은 다음과 같다. __schema 는 root-level 필드로 entry point, types 그리고 directive..
(7) Graphql-ruby - 스키마 정의 스키마 - 정의 GraphQL 시스템은 스키마라고 불린다. 스키마는 해당 시스템의 모든 타입과 필드를 포함하며, 스키마는 쿼리를 실행하고 introspection system 이라는 것을 생성한다. GraphQL 스키마는 GraphQL::Schema 를 확장한 클래스이다.class MyAppSchema
(6) GraphQL - 인트로스펙션 Introspection GraphQL 스키마가 어떠한 쿼리를 지원하는지 물어보는건 유용할 수 있다. GraphQL은 introspection 시스템을 통해 이를 가능케 한다. 스타워즈 예제에서 파일 starWarsIntrospection 은 introspection 시스템을 보여주는 많은 쿼리를 포함하고 있다. 그리고 이것은 이를 확인할 수 있는 테스트 파일이다. 우리는 타입 시스템을 디자인 하엿기 때문에 어떠한 타입들이 사용 가능한지 안다. 하지만 우리가 이를 디자인 하지 않았다면 우리는 GraphQL 에 __schema 필드를 쿼리 함으로써 이를 물어볼 수 있다. 그리고 이것은 쿼리의 루트 타입에서 언제나 사용 가능하다. 어떤 타입이 가능한지 한번 물어보자.{ __schema { types { na..
(5) GraphQL - 실행 Execution 유효성을 검사한 뒤 GraphQL 쿼리는 GraphQL 서버에 의해 실행되는데, 이 서버는 요청된 쿼리와 같은 형태로 결과를 리턴한다. 일반적으로 이는 JSON 이다. GraphQL 은 타입 시스템이 없는 쿼리는 실행할 수 없는데, 예시를 통해 살펴보자. 아래 예시들은 지금까지 써왔던 예시들의 일부이다.type Query { human(id: ID!): Human } type Human { name: String appearsIn: [Episode] starships: [Starship] } enum Episode { NEWHOPE EMPIRE JEDI } type Starship { name: String } 쿼리가 실행될 때 어떤 일들이 발생하는지 알아보기 위하여 예시를 보자.{ h..
(4) GraphQL - 유효성 검사 Validation 타입 시스템을 사용함으로써 GraphQL 쿼리가 유효한지 아닌지 미리 알 수 있다. 이는 서버와 클라이언트가 유효하지 않은 쿼리가 생성되었을 때 개발자에게 런타임 체크에 의존하지 않고 이를 효과적으로 알려줄 수 있게끔 한다. 우리의 스타워즈 예제에서 보면 파일 starWarsValidation-test.js 은 유효하지 않은 많은 쿼리를 포함하고 있으며 구현의 유효성 검사기를 실행할 수 있는 테스트 파일이다. 먼저 유효한 쿼리를 보자. 이것은 nested 쿼리이며, 이전 섹션에서 나온 예시와 비슷하지만 중복된 필드들은 fragment로 빼내었다.{ hero { ...NameAndAppearances friends { ...NameAndAppearances friends { ...Nam..
(3) GraphQL - 스키마와 타입 Schemas and Types 이번 페이지에서는 GraphQL 타입 시스템에 대해 알아야 할 모든 것과 어떤 데이터가 요청될 수 있는지 설명하는 방법에 대해 알아본다. GraphQL 이 모든 벡엔드 프레임 워크나 프로그래밍 언어와 함께 사용될 수 있기 때문에 우리는 구체적인 적용보다는 오직 개념에 대해서 알아볼 것이다.Schemas and Types Type SystemType LanguageObject Types and FieldsArgumentsThe Query and Mutation TypesScalar TypesEnumeration TypesLists and Non-NullInterfacesUnion TypesInput TypesType system GraphQL 을 전에 본 적이 있다면 Gra..