FormData
의 역할과 특성FormData
는 파일 업로드를 포함한 여러 유형의 데이터를 HTTP 요청으로 전송할 때 사용하는 객체입니다. 특히, 일반적인 JSON 데이터가 아닌 바이너리 파일이나 다양한 타입의 데이터를 함께 보낼 때 사용됩니다.
application/json
헤더를 사용하여 전송됩니다. 이 경우, 데이터를 직렬화하고 서버에서 JSON 파서를 통해 쉽게 해석할 수 있습니다.FormData
의 데이터 전송:FormData
는 데이터를 key-value
쌍의 형태로 저장합니다.Content-Type
이 *multipart/form-data
로 설정되며, 데이터를 특정한 boundary
를 기준으로 구분하여 직렬화합니다.FormData
와 multipart/form-data
의 특수성FormData
를 사용할 때 특별한 처리가 필요한 이유는 데이터 직렬화 방식과 헤더 관리의 차이 때문입니다.
Content-Type
설정axios
와 같은 HTTP 클라이언트는 요청의 Content-Type
을 *application/json
으로 설정하고 데이터를 JSON 문자열로 직렬화합니다.{
"key": "value"
}
FormData
요청:FormData
는 데이터를 multipart/form-data
로 전송해야 하며, 이 형식은 JSON과 다르게 데이터를 구분자(boundary)로 나누어 직렬화합니다.boundary
값을 생성하지만, 이를 기반으로 적절한 Content-Type
헤더를 설정해야 하므로 추가 처리가 필요합니다.
--boundary
Content-Disposition: form-data; name="key"
value
--boundary--
FormData
는 파일과 문자열 데이터를 모두 처리할 수 있도록 데이터를 boundary
를 기준으로 구분합니다. 이는 서버에서 데이터를 복원하는 데 필요한 정보를 포함합니다.instance
를 직접 사용해야 하는가?프로젝트 내 apiRequest
와 같은 유틸리티 함수는 일반적으로 JSON 데이터를 처리하도록 설계되어 있습니다. 그러나 FormData
는 JSON과 다르게 다뤄져야 하기 때문에 다음과 같은 이유로 직접 instance
를 사용하는 방식이 적합합니다.
apiRequest
의 한계apiRequest
는 주로 JSON 데이터를 처리하도록 설계된 함수로:
Content-Type
을 application/json
으로 설정합니다.FormData
는 JSON으로 변환될 수 없기 때문에, apiRequest
로 처리하기 어렵습니다.instance
로 추가 설정파일 업로드와 같은 작업은 FormData
를 사용하여 Content-Type
을 명시적으로 설정해야 하며, 이는 axios
의 기본 설정만으로는 처리되지 않습니다. 따라서 instance
를 직접 사용하여 다음과 같이 세부 설정을 수행합니다:
FormData
객체 생성: 데이터를 전송하기 위해 FormData
인스턴스를 생성하고 필요한 데이터를 추가합니다.multipart/form-data
를 지정하여 데이터가 올바르게 직렬화되도록 보장합니다.FormData
에 추가하면 브라우저가 자동으로 바이너리 데이터를 처리하도록 지원합니다.const formData = new FormData();
formData.append('file', file);
const response = await instance.request<ImageUpload>({
url: 'api/v1/images?type=MEMBER',
method: 'post',
data: formData,
headers: {
'Content-Type': 'multipart/form-data', // 명시적으로 설정
},
});
이처럼 instance
를 사용하여 FormData
를 처리하면, 데이터 직렬화와 헤더 설정을 유연하게 관리할 수 있습니다.
FormData
사용의 주요 이점multipart/form-data
형식을 통해 파일 업로드를 지원하는 RESTful API와 호환성 유지.FormData
를 처리할 때 특별한 처리가 필요한 이유는 JSON 데이터와 다르게 multipart/form-data
형식을 사용하여 데이터를 전송하기 때문입니다.
apiRequest
와 같은 일반적인 JSON 처리 유틸리티로는 이를 적절히 지원할 수 없습니다.axios
의 instance
를 직접 사용하여 세부 설정을 제어해야 합니다.이러한 과정을 통해 FormData
요청이 올바르게 처리되도록 보장할 수 있습니다.