graphql을 사용하면서 schema를 바탕으로 code가 매치되게 할 수 있고, 코드를 바탕으로 schema가 생성되게 할 수 있습니다.
Schema-first & Code-first :
GraphQL & TypeScript를 사용하는 방법
모든 프로그래밍 언어와 독립적이며, 통합되는 언어이고,
NestJS
에서는 GraphQL 스키마를TypeScript
의 클래스 및 인터페이스 형식으로 구현됩니다.
Schema first:
graphql의 schema를 먼저 정의하고, 그 schema 정의에 맞게 코드를 작성하는 방법을 말합니다.
schema를 작성할 때는 graphql의 data model을 나타내기 위해 만들어진 SDL(Schema Definition Language)
를 사용합니다.
따라서, GraphQL 스키마를 기반으로 TypeScript 정의 (클래스 또는 인터페이스 사용)를 자동으로 생성하여 중복된 상용구 코드를 작성할 필요성을 줄여주며 전체 관계를 직관적으로 나타냄으로 팀 커뮤니케이션 장애가 적은 장점이 있습니다.
하지만 실제 코드에 해당하는 Resolver는 포함되지 않으므로 스키마 정의와 함께 Resolver가 계속적으로 동기화되어야하며 Resolver 코드와 SDL의 정의가 정확하게 일치해야하는 단점이 존재합니다.
"스키마의 개별 필드을 다루는 데 책임이 있는 함수"입니다. 클라이언트가 특정 필드에 대해 쿼리를 날리면, 해당 필드의 리졸버는 적절한 데이터 소스로부터 요청된 데이터를 패치합니다.
Code First :
데코레이터와TypeScript
클래스를 사용하여 먼저 작성한Resolver
을 기반으로 해당GraphQL 스키마
를 자동 생성합니다.
Code First는 TypeScript
로만 작업하고 언어 구문 간의 컨텍스트 전환을 피하려는 경우 유용합니다.
Schema
와 Resolver
간의 type safety를 보장하며 코드 중복이 최소화되는 장점이 존재합니다.
하지만, SDL과 비교해서 직관적이지 못한 단점이 존재합니다.