[GraphQL] #3 GraphQL schema와 SDL

김까치·2023년 4월 14일
0

GraphQL

목록 보기
3/5

GraphQL schema와 SDL

GraphQL schema는 GraphQL 서버에서 사용되는 데이터 모델의 구조를 정의하는 것입니다. 이것은 데이터 소스를 설명하고, 어떤 타입의 데이터가 존재하며, 어떤 쿼리가 가능한지 등을 나타냅니다.

GraphQL schema는 보통 Schema Definition Language (SDL)을 사용하여 정의됩니다. SDL은 간단한 텍스트 기반 언어로, GraphQL 타입 시스템을 기술하는 데 사용됩니다.

예를 들어, 다음은 간단한 GraphQL schema의 SDL 정의입니다.

type Query {
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  body: String!
}

이 GraphQL schema는 "Query"와 "Post" 두 개의 타입을 정의합니다. "Query" 타입은 "posts" 필드를 가지고 있으며, "Post" 타입의 배열을 반환합니다. "Post" 타입은 "id", "title", "body" 필드를 가지고 있으며, 각각 ID, String, String 타입을 반환합니다.

위의 GraphQL schema를 통해 클라이언트는 "posts" 필드를 쿼리할 수 있으며, 각각의 포스트에 대한 "id", "title", "body" 필드를 얻을 수 있습니다.


'Apollo Server requires either an existing schema, modules or typeDefs' 에러: 원인과 해결

'Apollo Server requires either an existing schema, modules or typeDefs' 에러는 Apollo Server를 초기화 할 때 발생하는 오류 중 하나입니다. 이 오류는 schema, modules, 또는 typeDefs 중 하나가 필요하다는 것을 나타냅니다. 그러나 이 오류는 주로 typeDefs가 없는 경우 발생합니다.

이 오류를 해결하려면, SDL (Schema Definition Language)을 사용하여 typeDefs를 정의해야합니다. 이를 위해서는 Apollo Server를 초기화하기 전에 typeDefs를 정의하는 파일을 만들고 해당 파일을 가져와야합니다.

아래는 예시 코드입니다:

// schema.js

import { gql } from 'apollo-server';

const typeDefs = gql`
  type User {
    id: ID!
    name: String!
    email: String!
  }

  type Query {
    getUser(id: ID!): User!
  }

  type Mutation {
    createUser(name: String!, email: String!): User!
  }
`;

export default typeDefs;

위의 코드에서는 gql 함수를 사용하여 typeDefs를 정의합니다. 이를 schema.js 파일에 저장하고, Apollo Server에서 이를 가져와서 사용합니다.

// index.js

import { ApolloServer } from 'apollo-server';
import typeDefs from './schema.js';

const server = new ApolloServer({
  typeDefs,
  // resolvers, dataSources 등 다른 설정
});

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

위의 코드에서 ./schema 경로에 schema.js 파일이 있는 것을 알 수 있습니다. 이 파일에서 정의된 typeDefs를 ApolloServertypeDefs 속성으로 전달하여 이 오류를 해결할 수 있습니다.

profile
개발자 연습생

0개의 댓글