[GraphQL] 기본 개념 이해하기[2]

HyeonMin Kim·2024년 6월 8일
post-thumbnail

이전 글에 이어서 포스팅합니다.

Type

GraphQL에서 Type은 데이터의 구조를 정의하는 핵심 요소입니다. Type은 필드와 타입을 가지며, 이를 통해 API에서 사용할 수 있는 데이터 형식을 정의합니다.

다음은 간단한 GraphQL Type의 예시 코드입니다:

type Post {
  id: ID!
  title: String!
  content: String!
  createdAt: String!
  author: User!
}

type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
}

이 코드에서는 Post 타입과 User 타입을 정의하고 있습니다.

Post 타입은 다음과 같은 필드를 가집니다:

  • id: ID 타입의 필수 필드
  • title: String 타입의 필수 필드
  • content: String 타입의 필수 필드
  • createdAt: String 타입의 필수 필드
  • author: User 타입의 필수 필드

User 타입은 다음과 같은 필드를 가집니다:

  • id: ID 타입의 필수 필드
  • name: String 타입의 필수 필드
  • email: String 타입의 필수 필드
  • posts: Post 타입의 필수 필드 목록

이 Type 정의를 통해 API에서 사용할 수 있는 데이터 구조를 명확히 정의할 수 있습니다. 클라이언트는 이 Type 정의를 기반으로 필요한 데이터를 요청할 수 있으며, 서버는 이 Type 정의에 따라 응답을 생성할 수 있습니다.

Type에는 다양한 종류의 데이터 타입이 있습니다. 기본 타입(String, Int, Float, Boolean, ID)과 함께 사용자 정의 타입(객체 타입, 열거형 타입 등)을 정의할 수 있습니다. 또한 필수 필드(!)와 nullable 필드를 구분할 수 있습니다.

Resolver

Resolver는 GraphQL 서버에서 클라이언트의 쿼리를 처리하고 응답을 생성하는 핵심 함수입니다. Resolver는 GraphQL Schema에 정의된 각 필드에 대응되며, 해당 필드의 데이터를 가져오거나 계산하는 역할을 합니다.

다음은 간단한 GraphQL Resolver의 예시 코드입니다:


const resolvers = {
  Query: {
    posts: (parent, args, context, info) => {
      // 데이터베이스에서 모든 게시물 데이터를 가져오는 로직
      return [
        { id: '1', title: 'Post 1', content: 'This is the content of Post 1', createdAt: '2023-05-01', author: { id: '1', name: 'John Doe', email: 'john@example.com' } },
        { id: '2', title: 'Post 2', content: 'This is the content of Post 2', createdAt: '2023-05-02', author: { id: '2', name: 'Jane Smith', email: 'jane@example.com' } },
      ];
    },
    post: (parent, args, context, info) => {
      // 데이터베이스에서 특정 게시물 데이터를 가져오는 로직
      return { id: args.id, title: 'Post 1', content: 'This is the content of Post 1', createdAt: '2023-05-01', author: { id: '1', name: 'John Doe', email: 'john@example.com' } };
    },
  },
  Mutation: {
    createPost: (parent, args, context, info) => {
      // 데이터베이스에 새 게시물을 생성하는 로직
      return { id: '3', title: args.title, content: args.content, createdAt: '2023-05-03', author: { id: '1', name: 'John Doe', email: 'john@example.com' } };
    },
  },
  Post: {
    author: (parent, args, context, info) => {
      // 게시물의 author 필드에 대한 데이터를 가져오는 로직
      return { id: parent.author.id, name: parent.author.name, email: parent.author.email };
    },
  },
};

이 Resolver 코드에는 다음과 같은 기능이 구현되어 있습니다:

  • Query.posts: 모든 게시물 데이터를 가져오는 기능
  • Query.post: 특정 게시물 데이터를 가져오는 기능
  • Mutation.createPost: 새 게시물을 생성하는 기능
  • Post.author: 게시물의 author 필드에 대한 데이터를 가져오는 기능

Resolver 함수는 다음과 같은 인자를 받습니다:

  • parent: 상위 Resolver에서 반환된 값
  • args: 클라이언트가 전달한 인수
  • context: 서버 컨텍스트 정보
  • info: 쿼리 실행 정보

이 인자들을 활용하여 Resolver 함수는 데이터베이스나 기타 데이터 소스에서 필요한 데이터를 가져와 응답을 생성합니다.

Resolver는 GraphQL 서버의 핵심 기능을 구현하는 부분으로, 클라이언트의 쿼리를 처리하고 데이터를 반환하는 역할을 합니다. 이를 통해 클라이언트는 필요한 데이터를 효과적으로 요청하고 받을 수 있습니다.

0개의 댓글