![]()
FormData의 개념
FormData는 웹 애플리케이션에서 폼 데이터를 쉽게 조작하고 전송할 수 있도록 도와주는 JavaScript 객체입니다. 일반적으로 HTML <form> 요소를 통해 사용자 입력을 수집하고, 이 데이터를 서버에 전송하기 위해 FormData 객체를 사용합니다.
submit을 대체하여, AJAX를 통해 비동기적으로 서버에 데이터를 전송할 수 있게 해줍니다. FormData 객체를 사용하면, 여러 개의 입력 필드를 포함하는 폼 데이터를 손쉽게 구성하고 전송할 수 있습니다.예를 들어, 이미지 파일, 텍스트 데이터 등 다양한 형식의 데이터를 포함할 수 있습니다. 이때, HTTP 요청의 Content-Type 헤더는 multipart/form-data로 설정되어, 다양한 데이터 형식이 서버로 전송됩니다.FormData의 주요 메소드
FormData 객체는 여러 가지 메소드를 제공하여 데이터의 추가, 삭제, 조회 등을 가능하게 합니다. 아래는 주요 메소드와 그 설명입니다.
| 메소드 | 설명 |
|---|---|
append() | 새로운 키/값 쌍을 추가합니다. |
delete() | 특정 키에 해당하는 값을 삭제합니다. |
get() | 특정 키의 첫 번째 값을 반환합니다. |
getAll() | 특정 키에 해당하는 모든 값을 배열로 반환합니다. |
entries() | 모든 키/값 쌍을 포함하는 이터레이터를 반환합니다. |
has() | 특정 키가 존재하는지 여부를 확인합니다. |
set() | 특정 키의 값을 설정하거나 새로운 키/값 쌍을 추가합니다. |
이러한 메소드를 활용하면 사용자는 필요에 따라 데이터를 유연하게 조작할 수 있습니다.
FormData 사용법
FormData 객체를 활용하기 위해서는 먼저 JavaScript에서 객체를 생성해야 합니다. 다음은 기본적인 사용 예시입니다.
```javascript // FormData 객체 생성 let formData = new FormData();
// 데이터 추가 formData.append("username", "exampleUser"); formData.append("profileImage", fileInput.files[0]); // 파일 추가 ```
위의 코드 예시에서 FormData 객체를 생성한 후, append() 메소드를 통해 사용자 이름과 프로필 이미지를 추가하였습니다. 이와 같이 다양한 타입의 데이터를 추가할 수 있습니다.
FormData와 파일 전송
FormData를 사용하면 파일 및 바이너리 데이터를 쉽게 전송할 수 있습니다. 예를 들어, 이미지 파일을 서버로 전송할 때 Blob 객체를 활용하여 FormData에 추가할 수 있습니다.
javascript
// 이미지 파일을 FormData에 추가
let imageBlob = new Blob([imageData], { type: 'image/png' });
formData.append("image", imageBlob, "example.png");
위의 코드에서 Blob 객체를 생성하고, 이를 FormData에 추가하여 서버로 전송할 수 있는 형태로 만들었습니다. 이러한 방식은 특히 이미지나 비디오 파일 전송 시 유용하게 사용됩니다.
AJAX 통신 - fetch 메서드
FormData 객체를 활용하여 데이터 전송을 위해서는 AJAX 통신이 필요합니다. 전통적으로 XMLHttpRequest 객체를 사용했지만, 최근에는 fetch API가 널리 사용되고 있습니다.
fetch 메서드는 Promise 기반으로 작동하여 사용이 간편하고, 코드의 가독성을 높입니다.fetch 메서드 기본 사용법
fetch 메서드를 사용하여 데이터를 전송하는 기본적인 구조는 다음과 같습니다.
javascript
fetch('https://example.com/api/upload', {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
위의 코드는 FormData 객체를 fetch 메서드의 body로 전달하여 서버에 POST 요청을 보내는 예시입니다. 서버로부터의 응답은 Promise 형태로 처리되며, 성공 여부에 따라 후속 작업을 수행합니다.
다양한 HTTP 메소드 사용
fetch 메서드는 GET, POST, PUT, DELETE 등 다양한 HTTP 메소드를 사용할 수 있습니다. 각 메소드는 특정한 용도로 사용되며, 아래 표에 요약하였습니다.
| HTTP 메소드 | 설명 |
|---|---|
| GET | 서버에서 데이터를 요청하는 데 사용됩니다. |
| POST | 새로운 데이터를 서버에 생성하는 데 사용됩니다. |
| PUT | 기존 데이터를 수정하는 데 사용됩니다. |
| PATCH | 데이터의 일부를 수정하는 데 사용됩니다. |
| DELETE | 서버에서 데이터를 삭제하는 데 사용됩니다. |
이러한 메소드를 이용하여 필요한 작업을 수행할 수 있으며, 각 메소드에 따라 fetch를 호출할 때 추가적인 옵션을 설정해야 합니다.
비동기 처리와 async/await
JavaScript에서는 비동기 처리가 필수적입니다. fetch 메서드는 Promise를 반환하므로, async/await 문법을 활용하여 코드의 가독성을 높일 수 있습니다.
async/await를 사용한 예시입니다.```javascript async function uploadData() { try { const response = await fetch('https://example.com/api/upload', { method: 'POST', body: formData });
if (!response.ok) {
throw new Error('Network response was not ok');
}
const data = await response.json();
console.log('Success:', data);
} catch (error) {
console.error('Error:', error);
}
} ```
위의 코드는 async 함수 내에서 await 키워드를 사용하여 fetch 메서드의 결과를 기다립니다. 이를 통해 비동기 처리를 더욱 직관적으로 작성할 수 있습니다.
결론
FormData와 fetch 메서드는 현대 웹 애플리케이션에서 데이터 전송을 간편하게 할 수 있도록 도와주는 중요한 도구입니다. FormData를 사용하면 다양한 데이터를 서버로 쉽게 전송할 수 있으며, fetch 메서드를 통해 비동기적으로 요청할 수 있습니다.
FormData와 fetch에 대한 이해를 높이고, 실제 프로젝트에 적용할 수 있는 기초를 다지길 바랍니다.감사합니다!