Schema-first vs Code-first

0
post-thumbnail

1. 서론

  • Nest는 GraphQL 애플리케이션을 빌드 하는데 코드 우선(Code-first) 및 스키마 우선(Schema-first)방법을 제공한다.

2. Schema-first vs Code-first

  • Code-first는 코드 우선 접근 방식에서는 데코레이터와 TypeScript 클래스를 사용하여 해당 GraphQL 스키마를 생성합니다. 이 방법은 TypeScript로만 작업하고 언어 구문 간의 컨텍스트 전환을 피하려는 경우 유용하다.

  • 스키마 우선 접근 방식에서 진실된 소스는 GraqhQL SDL(Schema Definision Language) 파일입니다.
    모든 프로그래밍 언어와 독립적이며, 통합되는 언어이고, NestJS에서는 GraphQL 스키마를 TypeScript의 클래스 및 인터페이스 형식으로 구현된다..
    GraphQL 스키마를 기반으로 TypeScript 정의 (클래스 또는 인터페이스 사용)를 자동으로 생성하여 중복된 상용구 코드를 작성할 필요성을 줄여줍니다.
  • Schema를 먼저 정의하고, 그에 맞게 코드를 작성하기 때문에 Schema-first라고 한다.

3. 장점과 단점

3-1) Schema-first

  • 장점 :
    1. ASynchoronous(비동기)한 개발 가능
    1. 확실한 의사소통의 수단
    2. SDL을 제외한 documents가 필요 없음
    3. 빠른 mocking으로 인해 개발 속도가 빨라짐
  • 단점 :
    1. SDL과 Resolver간의 일치성을 보장할 수 없음
    1. run time에서만 알 수 있는 단점
    2. schema가 늘어갈 수록 실수의 가능성이 높아짐.
    3. 다양한 도구들로 문제를 해결하려 하지만 근본적인 해결책이 되지 않는다.

3-2) Code-first

  • 장점 :
    1. scheam와 resolver간의 type safety를 보장
    1. 자신이 편한 언어로 개발 가능
    2. 코드 중복의 최소화

4. 단어 정의

  • Rest가 Endpoint집합이라면, GraphQl은 타입 집합이다. 이 데이터 타입 집합은 Schema라고 한다.
  • SDL은 스키마를 정의하는 언어이다.

5. SDL에 대한 설명

  • GraphQL은 아래에서 설명하는 SDL을 사용하여 스키마를 작성한다. 이 스키마는 클라이언트와 서버 사이에서 어떻게 클라이언트가 데이터에 접근할 수 있는지를 알려주게 된다. 한번 스키마가 정의되면 추가적인 커뮤니케이션 없이 클라이언트, 서버는 어떤 식으로 데이터 구조가 정의되어 있는지 알 수 있다는 장점이 있다.
    GraphQL은 API의 스키마를 정의할 때 사용하는 타입시스템을 가지고 있다. 스키마를 작성하는 문법을 SDL이라고 한다. SDL에서 ! 은 필수 값을 나타내는 기호로 사용된다. 아래와 같은 스키마가 있다면, !가 있는 name, age, title은 필수 값이 된다.
  • query, mutation, subscription도 SDL의 일부이다.
type Person {
  name: String!
  age: Int!
}
type Post {
  title: String!
}

참고한 블로그

profile
끝날때 까지 끝난게 아니야. 결국 내가 이겨!

0개의 댓글