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를 개발하면 타입 안정성을 높일 수 있으며, 코드의 품질을 향상시킬 수 있습니다.
참고문헌: