[typescript] 타입 안전성을 갖춘 GraphQL-js 개발

GraphQL-js는 효율적이고 강력한 쿼리 언어인 GraphQL을 JavaScript로 구현한 라이브러리입니다. GraphQL을 사용하면 클라이언트가 필요로 하는 데이터를 정확히 요청할 수 있으며, 타입 시스템을 사용하여 편리하고 안전한 API를 구축할 수 있습니다. 이번 글에서는 TypeScript와 함께 GraphQL-js를 사용하여 타입 안전성을 갖춘 GraphQL 서버를 개발하는 방법에 대해 살펴보겠습니다.

1. GraphQL-js와 TypeScript

GraphQL-js는 기본적으로 JavaScript로 작성되었지만 TypeScript와 함께 사용할 수 있습니다. TypeScript를 사용하면 정적 타입 검사를 통해 코드의 안정성을 높일 수 있으며, 코드의 가독성을 향상시킬 수 있습니다.

2. 타입 정의 파일 작성

먼저 TypeScript에서 사용할 GraphQL 스키마에 대한 타입 정의 파일을 작성해야 합니다. 이를 통해 스키마의 타입과 필드에 대한 정보를 TypeScript에서 활용할 수 있습니다.

// schema.d.ts

export interface User {
  id: string;
  name: string;
  email: string;
}

export interface Post {
  id: string;
  title: string;
  content: string;
  author: User;
}

위 예시는 User와 Post 타입의 정의 예시로, 각각의 필드에 대한 타입을 정의하고 있습니다.

3. resolvers 작성

GraphQL-js에서 Query나 Mutation에 대한 로직을 정의하는 resolver 함수를 작성할 때도 TypeScript를 활용할 수 있습니다. 이를 통해 타입 안정성과 가독성을 높일 수 있습니다.

예를 들어, 아래와 같이 resolver 함수를 작성할 수 있습니다.

// resolver.ts

import { User, Post } from './schema';

const resolvers = {
  Query: {
    user(parent: any, args: { id: string }, context: any, info: any): User {
      // 로직 구현
    },
    post(parent: any, args: { id: string }, context: any, info: any): Post {
      // 로직 구현
    }
  }
};

위 예시에서 User 및 Post 타입을 활용하여 resolver 함수의 파라미터와 반환 타입을 명확하게 정의하여 타입 안정성을 확보하고 있습니다.

4. GraphQL 스키마 구축

마지막으로 GraphQL 스키마를 구축할 때도 타입 안정성을 고려하여 작성할 수 있습니다. 이를 통해 클라이언트가 올바른 쿼리를 전송하도록 보장할 수 있습니다.

// schema.ts

import { makeExecutableSchema } from 'graphql-tools';
import { resolvers } from './resolver';

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

  type Post {
    id: String
    title: String
    content: String
    author: User
  }

  type Query {
    user(id: String): User
    post(id: String): Post
  }
`;

export default makeExecutableSchema({ typeDefs, resolvers });

위와같이 GraphQL 스키마를 TypeScript와 함께 작성하여 타입 안정성을 확보할 수 있습니다.

이처럼 TypeScript를 활용하여 GraphQL-js를 개발하면 타입 안정성을 높일 수 있으며, 코드의 품질을 향상시킬 수 있습니다.

참고문헌: