Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 1. Multipart, 멀티파트 - 개념 (이미지 업로드, 비디오 업로드, 메모리 효율성, 네트워크 대역폭, 개별 재전송) 본문

iOS 응용 (swift)

[iOS - swift] 1. Multipart, 멀티파트 - 개념 (이미지 업로드, 비디오 업로드, 메모리 효율성, 네트워크 대역폭, 개별 재전송)

jake-kim 2023. 6. 30. 01:23

1. Multipart, 멀티파트 - 개념 (이미지 업로드, 비디오 업로드, 메모리 효율성, 네트워크 대역폭, 개별 재전송)

2. Multipart, 멀티파트 - URLSession으로 구현 (uploadTask, URLSessionUploadTask, progress 처리)

3. Multipart, 멀티파트 - BackgroundSession 사용 방법 (background에서 업로드, suspended에서 업로드, not running에서 업로드)

Multipart Data 방식이란?

  • 파일의 크기가 큰 것을 서버에 업로드할 때 사용하는 방법
  • form-data를 올리는 방식이라고도 명칭
  • HTTP POST방식이고 body에 특정 형식을 담아서 보내는 것

ex) 서버에서 받는 body 내용

  • form-data 형태이며, 여러개의 form을 전달할 수 있고 구분자는 UUID string과 같은 값을 같이 전송 
    • 각 form-data 구분자: --{uuid_string}\r\n
// 참고: https://docs.spring.io/spring-framework/reference/web/webflux/controller/ann-methods/multipart-forms.html

POST /someUrl
Content-Type: multipart/mixed

--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
Content-Disposition: form-data; name="meta-data"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: 8bit

{
	"name": "value"
}
--edt7Tfrdusa7r3lNQc79vXuhIIMlatb7PQg7Vp
Content-Disposition: form-data; name="file-data"; filename="file.properties"
Content-Type: text/xml
Content-Transfer-Encoding: 8bit
... File Data ...

ex) body에 여러가지의 데이터를 실어서 보냄

https://m.boostcourse.org/web326/lecture/59008

Multipart의 장점

  • 각 파트가 개별적으로 전송되는 방식으로 데이터를 나누어 전송
    • 파일의 크기에 영향을 받지 않는 장점이 존재
    • 메모리 효율성
    • 네트워크 대역폭에 효율
    • 개별적으로 재전송이 쉬움
    • 대용량 파일 업로드가 유리
  • 메모리 효율성
    • 파일을 작은 파트로 분리하여 전송하므로 이는 전체 파일을 메모리에 로드하지 않고도 작은 조각들을 순차적으로 전송이 가능
    • 전체 파일을 메모리에 한 번에 올리지 않고도 업로드할 수 있어서 메모리 사용량을 효율적으로 관리가 가능
  • 네트워크 대역폭에 효율
    • 멀티파트 폼 데이터는 파트를 순차적으로 전송
    • 한 번에 전체 파일을 전송하는 것보다 네트워크 대역폭을 더 효율적으로 활용
    • 대용량 파일의 경우 전체 파일을 한 번에 업로드하는 것보다 작은 파트들로 분할하여 전송하면 더 빠른 전송 속도가 가능
  • 개별적으로 재전송 가능
    • 멀티파트 폼 데이터는 각각의 파트가 독립적으로 전송
    • 전송 중에 문제가 발생했을 경우 해당 파트만 재전송이 가능
    • 일반적으로 전체 파일을 한 번에 업로드하는 경우에는 전송이 중단된 경우에 다시 처음부터 전송해야 하지만 멀티파트 폼 데이터를 사용하면 문제가 발생한 파트만 다시 전송하여 효율적으로 재전송이 가능

일반적인 POST와 멀티파트 비고

  • 일반적인 POST 방식 
    • 텍스트 기반의 데이터를 전송할 때 사용
    • 멀티파트 폼 데이터보다 간단한 구현이 가능하며, 서버 측에서 일반적인 폼 데이터를 처리하는 로직 사용 가능
    • 큰 파일을 업로드하는 경우에는 전체 파일을 메모리에 올려야 하므로 리소스 사용 측면에서 제한이 존재
  • 멀티파트 전송 방식
    • 이미지나 파일과 같은 바이너리 데이터를 전송할 때 주로 사용
    • 멀티파트 폼 데이터는 각 파트가 분리되어 전송되기 때문에 파일의 크기에 영향받지 않기에 큰 파일을 업로드할 때 유리
    • 서버 측에서 멀티파트 데이터를 처리하기 위한 별도의 로직이 필요
    • 멀티파트 데이터 전송은 보다 정교한 데이터 구조를 지원하므로, 파일과 추가적인 필드들을 함께 전송하는 경우에 유용

* 참고

https://m.boostcourse.org/web326/lecture/59008

https://www.merriam-webster.com/dictionary/multipart

https://docs.spring.io/spring-framework/reference/web/webflux/reactive-spring.html#webflux-multipart

https://docs.spring.io/spring-framework/reference/web/webflux/controller/ann-methods/multipart-forms.html

Comments