Schema-first vs Code-first

김지우·2022년 11월 20일
0

3주차

목록 보기
7/8
post-thumbnail

1️⃣ Graphql Schema

graphql을 사용하면서 schema를 바탕으로 code가 매치되게 할 수 있고, 코드를 바탕으로 schema가 생성되게 할 수 있습니다.

Schema-first & Code-first :
GraphQL & TypeScript를 사용하는 방법



📍 SDL 란?

모든 프로그래밍 언어와 독립적이며, 통합되는 언어이고, NestJS에서는 GraphQL 스키마를 TypeScript의 클래스 및 인터페이스 형식으로 구현됩니다.

2️⃣ Schema First(스키마 우선)

Schema first:
graphql의 schema를 먼저 정의하고, 그 schema 정의에 맞게 코드를 작성하는 방법을 말합니다.

schema를 작성할 때는 graphql의 data model을 나타내기 위해 만들어진 SDL(Schema Definition Language) 를 사용합니다.

따라서, GraphQL 스키마를 기반으로 TypeScript 정의 (클래스 또는 인터페이스 사용)를 자동으로 생성하여 중복된 상용구 코드를 작성할 필요성을 줄여주며 전체 관계를 직관적으로 나타냄으로 팀 커뮤니케이션 장애가 적은 장점이 있습니다.

하지만 실제 코드에 해당하는 Resolver는 포함되지 않으므로 스키마 정의와 함께 Resolver가 계속적으로 동기화되어야하며 Resolver 코드와 SDL의 정의가 정확하게 일치해야하는 단점이 존재합니다.

📍 resolver 란?

"스키마의 개별 필드을 다루는 데 책임이 있는 함수"입니다. 클라이언트가 특정 필드에 대해 쿼리를 날리면, 해당 필드의 리졸버는 적절한 데이터 소스로부터 요청된 데이터를 패치합니다.



3️⃣ Code First(코드 우선)

Code First :
데코레이터와 TypeScript 클래스를 사용하여 먼저 작성한 Resolver 을 기반으로 해당 GraphQL 스키마를 자동 생성합니다.

Code FirstTypeScript 로만 작업하고 언어 구문 간의 컨텍스트 전환을 피하려는 경우 유용합니다.

SchemaResolver간의 type safety를 보장하며 코드 중복이 최소화되는 장점이 존재합니다.

하지만, SDL과 비교해서 직관적이지 못한 단점이 존재합니다.

profile
백엔드 성장 기록

0개의 댓글