[typescript] TypeScript를 이용한 GraphQL-js 서버에서의 파일 업로드 처리

GraphQL-js 서버에서 파일 업로드를 처리하는 것은 일반적으로 RESTful API에서 하는 것보다 조금 복잡합니다. 하지만 TypeScript를 사용한다면 이를 처리하기 쉬울 수 있습니다.

이번 글에서는 GraphQL-js 서버에서 파일 업로드를 처리하는 방법과 TypeScript를 이용하여 타입 선언을 하는 방법에 대해 알아보겠습니다.

1. GraphQL 파일 업로드 지원 패키지 설치

가장 먼저 해야 할 일은 GraphQL 서버에서 파일 업로드를 지원하는 패키지를 설치하는 것입니다. 여기서는 graphql-upload 패키지를 사용하도록 하겠습니다.

$ npm install graphql-upload

2. GraphQL Schema 수정

업로드할 파일에 대한 GraphQL 스키마에 대한 수정이 필요합니다. 이를 위해서 graphql-upload 패키지를 사용하여 GraphQLUpload 타입을 스키마에 추가해야 합니다.

import { GraphQLUpload } from 'graphql-upload';

const typeDefs = `
  scalar Upload
  type Mutation {
    uploadFile(file: Upload!): String
  }
`;

3. Resolver 수정

업로드된 파일을 처리하기 위한 리졸버를 작성해야 합니다. TypeScript에서 파일을 다룰 때, 리졸버에서는 FileUpload 타입을 사용해야 합니다.

import { FileUpload } from 'graphql-upload';

const resolvers = {
  Mutation: {
    uploadFile: async (_, { file }: { file: Promise<FileUpload> }) => {
      const uploadedFile = await file;
      // 파일 처리 로직 작성
      return '파일이 업로드 되었습니다.';
    },
  },
};

위의 예시에서 FileUpload 타입은 graphql-upload 패키지에서 제공됩니다.

이제 파일 업로드를 처리하는 GraphQL-js 서버를 만들기 위한 기본적인 설정이 끝났습니다. TypeScript를 사용하면 타입을 명확하게 지정하여 파일 업로드를 보다 안정적으로 처리할 수 있습니다.

이 외에도 파일 저장 경로나 파일명 중복 처리 등 다양한 부분에 대한 고려가 필요하겠지만, 이는 상황에 맞게 유연하게 처리해주어야 합니다.

더 많은 자세한 내용과 예제 코드에 대해서는 graphql-upload 패키지의 공식 문서를 참고해주세요.

이상으로 TypeScript를 이용한 GraphQL-js 서버에서의 파일 업로드 처리 방법에 대해 알아보았습니다.