Schema-first vs Code-first

조성민·2022년 7월 26일
0

Nest

목록 보기
1/4

1. Schema First

스키마 우선 접근 방식에서 진실된 소스는 GraqhQL SDL(Schema Definision Language) 파일입니다.

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

GraphQL 스키마를 기반으로 TypeScript 정의 (클래스 또는 인터페이스 사용)를 자동으로 생성하여 중복된 상용구 코드를 작성할 필요성을 줄여줍니다.

GraphQLModule.forRoot<ApolloDriverConfig>({
  driver: ApolloDriver,
  typePaths: ['./**/*.graphql'],
}),

스키마 우선 접근 방식을 사용하려면 먼저 옵션 개체에 typePaths 속성을 추가합니다. 
typePaths 속성은 GraphQLModule이 작성할 GraphQL SDL 스키마 정의 파일을 찾아야하는 위치를 나타냅니다.

// cat.graphql

type Query {
  cats: [Cat]
  cat(id: ID!): Cat
}

type Mutation {
  createCat(createCatInput: CreateCatInput): Cat
}

type Subscription {
  catCreated: Cat
}

type Owner {
  id: Int!
  name: String!
  age: Int
  cats: [Cat!]
}

type Cat {
  id: Int
  name: String
  age: Int
  owner: Owner
}

input CreateCatInput {
  name: String
  age: Int
}

.graphql 로 스키마를 직접 작성해줘야 합니다.



2. Code First

코드 우선 접근 방식에서는 데코레이터와 TypeScript 클래스를 사용하여 해당 GraphQL 스키마를 생성합니다.
이 방법은 TypeScript로만 작업하고 언어 구문 간의 컨텍스트 전환을 피하려는 경우 유용합니다.
코드 우선 접근 방식을 사용하려면 먼저 옵션 객체에 autoSchemaFile 속성을 추가합니다.

GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: 'src/commons/graphql/schema.gql',
    }

autoSchemaFile 속성 값은 자동으로 생성된 스키마가 생성될 경로입니다.



3. 차이점

- code first는 typescript로 클래스를 짜면 해당 클래스에 해당하는 graphql schema를 만들어 주고

- schema first는 graphql schema를 먼저 짠후 typescript 클래스나 인터페이스를 생성해줍니다.

profile
풀리면 재밌는 알고리즘

0개의 댓글