개발
[ReactNative] FormData 전송하기(1)
2023년 12월 23일
안녕하세요, Team.Petmory의 프론트엔드 황주희입니다.
저는 오늘 포잇 서비스에서 팀 생성 파트를 개발하며, FormData를 통해 데이터를 전달한 경험을 공유하고자합니다.
저희 팀에서 FormData를 활용한 방법을 소개하기 전에,
기본적으로 FormData란 무엇인지, 메서드, 장단점에 대해 소개하겠습니다.
FormData란?
: HTML 폼 요소의 데이터를 쉽게 수집하고, JavaScript를 사용하여 해당 데이터를 가공하고 전송할 수 있게 해주는 객체
주로 파일 업로드와 같이 다양한 형태의 데이터를 서버로 전송할 때 활용
HTML5의
<form>
태그이용해 input 값을 서버에 전송하는 것처럼, 자바스크립트에서 FormData() 클래스를 이용해 스크립트로 전송HTML Submit: Ajax를 통해 서버에 제출
Ajax란?
: Asynchronous JavaScript and XML
말 그대로 JavaScript와 XML을 이용한 비동기적 정보 교환 기법
객체 생성 후 사용 가능
FormData METHOD
데이터 추가
append
formData에 단순한 정보를 넣는 경우
name: 속성, value: 입력값 추가
formData에 파일을 넣는 경우
name: 속성, blob: 파일객체, fileName: 파일이름 추가
formData.append(name, blob, fileName) const blob = new Blob([JSON.stringify(dataObj)], { // 객체를 json 타입으로 변환하는 경우 type: 'application/json', }) formData.append('groupName', blob, 'petmory')
→ blob이란?
: Binary Large Object
바이너리 형태로 큰 객체를 저장.
ex) 이미지, 비디오, 사운드 등과 같은 멀티미디어 객체
blob에 대해서는 다음 블로그에서 더 자세히 다루겠습니다
set
: append 함수처럼 필드를 추가
→ 기존 key가 있으면, 그 key 값을 모두 덮어씌운다는 점에서 차이!
formData.set(name, value) fromData.set(name, blob, fileName) formData.append('item', 'hi') formData.append('item', 'hello') // append의 경우 ['hi', 'hello'] formData.set('item', 'hi') formData.set('item', 'hello') // set의 경우 hello
데이터 조회
get
: 주어진 name을 가진 필드의 첫번째 value 반환
getAll
: 주어진 name을 가진 필드의 모든 value 반환
has
: 주어진 name에 해당하는 필드가 있는지를 boolean 값으로 반환
formData.get(name) formData.get('groupName') // petmory formData.getAll(name) formData.getAll('groupName') // ['petmory', 'pawith'] formData.has(name) formData.has('groupName') // true formData.has('petmory') // false
데이터 제거
delete
: 주어진 name을 가진 필드 제거
formData.delete(name) formData.delete('groupName')
FormData의 장단점
장점
Binary 데이터를 직접 전송할 수 있으므로 용량이 적고 빠름
파일 업로드, 멀티파트(form-data) 형식의 데이터 전송 지원
비동기식으로 여러 데이터 필드와 파일을 함께 전송 가능
단점
텍스트 데이터 형식이 아니므로 순수한 Binary 데이터만 전송하는 것이 어려움
필드 이름과 값을 설정해야 하기 때문에 구조가 복잡함
포잇을 개발하며 formData를 처음 사용해보아서 formData에 대한 기본 개념을 정리해보았습니다. 이렇게 개념을 이해하는 것은 쉽지만, 실제 상황에 적용하는 것은 늘 어렵더라구요! 다음 포스팅에서는 포잇 앱 개발 과정에서 formData를 활용하여 데이터를 전송한 방법에 대해 소개하겠습니다. 많은 관심 부탁드려요!