🔙뒤로가기

GraphQL은 기본적으로 JSON 기반의 데이터 교환만을 지원하므로, 원래는 파일 업로드를 지원하지 않는다. 하지만, 몇 가지 방법을 통해 GraphQL에서 파일 업로드를 구현할 수 있다.

multipart/form-data 요청 사용

가장 일반적인 방법은 HTTP의 multipart/form-data 요청을 사용하는 것이다. 이 방법은 GraphQL 스펙의 일부는 아니지만, 많은 GraphQL 서버 라이브러리가 이를 지원한다.

클라이언트는 파일과 함께 다음 두 가지를 multipart/form-data 요청으로 보낸다.

서버는 이 요청을 받아, 파일을 적절한 위치에 저장하고, 저장된 파일에 대한 정보를 GraphQL 요청의 변수로 전달한다. 그 후 일반적인 GraphQL 요청을 처리하듯이 이 요청을 처리한다.

Base64 인코딩 사용

다른 방법으로는 파일을 Base64 문자열로 인코딩하여, 일반적인 GraphQL 요청의 일부로 전송하는 것이다. 이 방법은 구현이 간단하다는 장점이 있지만, 큰 파일을 다루기 어렵다는 단점이 있다. Base64 인코딩은 원본 데이터 크기의 약 33%를 추가로 사용하므로, 네트워크 사용량이 증가하고, 클라이언트와 서버 모두에서 처리 시간이 늘어난다.