[typescript] GraphQL 스키마 리졸버 함수 작성

GraphQL은 서버 측에서 쿼리를 해석하고 실행하는 데 필요한 리졸버 함수를 정의하는 스키마를 사용합니다. TypeScript로 GraphQL 스키마 리졸버 함수를 작성하는 방법을 알아보겠습니다.

1. 리졸버 함수 작성

먼저, GraphQL 스키마에서 정의한 쿼리나 뮤테이션에 대한 각각의 동작을 수행하는 리졸버 함수를 작성합니다. 이 함수는 특정 필드에 대한 데이터를 반환하거나 데이터를 조작하는 역할을 합니다.

export const resolvers = {
  Query: {
    getUser: (parent, { id }, context, info) => {
      // 사용자 정보를 데이터베이스나 다른 소스로부터 가져와 반환
    },
    // 다른 쿼리 리졸버 함수들 작성
  },
  Mutation: {
    updateUser: (parent, { id, input }, context, info) => {
      // 사용자 정보를 업데이트하고 결과를 반환
    },
    // 다른 뮤테이션 리졸버 함수들 작성
  },
};

2. TypeScript 타입 정의

리졸버 함수의 입력 및 반환 값에 대한 TypeScript 타입을 정의합니다. 이를 통해 코드의 가독성을 높이고 잠재적인 오류를 미리 방지할 수 있습니다.

interface User {
  id: string;
  name: string;
  email: string;
  // 사용자 정보에 관련된 다른 속성들 정의
}

interface Resolvers {
  Query: {
    getUser: (parent: any, args: { id: string }, context: any, info: any) => User;
    // 다른 쿼리 리졸버 함수들의 타입 정의
  };
  Mutation: {
    updateUser: (parent: any, args: { id: string, input: Partial<User> }, context: any, info: any) => User;
    // 다른 뮤테이션 리졸버 함수들의 타입 정의
  };
}

3. 스키마와 리졸버 함수 연결

마지막으로, 스키마와 리졸버 함수를 연결하여 GraphQL 서버를 구성합니다.

import { makeExecutableSchema } from 'graphql-tools';

const typeDefs = `
  type Query {
    getUser(id: ID!): User
    # 다른 쿼리 타입들 정의
  }
  type Mutation {
    updateUser(id: ID!, input: UserInput!): User
    # 다른 뮤테이션 타입들 정의
  }
  type User {
    id: ID!
    name: String
    email: String
    # 사용자 정보에 관련된 다른 필드들 정의
  }
  input UserInput {
    name: String
    email: String
    # 사용자 정보 입력에 관련된 다른 필드들 정의
  }
`;

const schema = makeExecutableSchema({ typeDefs, resolvers });

결론

이제 TypeScript를 사용하여 GraphQL 스키마 리졸버 함수를 작성하는 방법에 대해 알아보았습니다. 타입 안정성과 가독성을 높이며, 코드를 보다 견고하게 만들 수 있습니다. GraphQL을 TypeScript와 함께 사용하여 효율적이고 안전한 서버 개발을 진행할 수 있습니다.

참고 문헌: