멀티파트 업로드란?
멀티파트 업로드는 하나의 큰 파일을 여러 개의 작은 조각(파트, Part)으로 나누어 각각 업로드한 뒤, 서버에서 이를 다시 하나의 파일로 합치는 방식입니다. 예를 들어 AWS S3, Google Cloud Storage 같은 클라우드 스토리지 서비스는 대용량 파일 업로드 시 이 기능을 기본으로 제공합니다. 파일 전체를 한 번에 전송하는 대신, 보통 5MB~100MB 단위로 잘라서 여러 번에 걸쳐 전송하는 것이 핵심입니다.
동작 원리와 예시
멀티파트 업로드는 이사할 때 무거운 짐을 하나의 큰 박스에 담지 않고, 여러 개의 작은 박스에 나눠 담아 옮기는 것과 비슷합니다. 박스 하나가 파손되거나 옮기다 떨어뜨려도 다른 박스에는 영향이 없고, 그 박스만 다시 옮기면 되죠. 실제 동작 과정은 다음과 같습니다.
- 업로드 시작을 서버에 알리고 고유한 업로드 ID를 발급받습니다.
- 파일을 여러 파트로 나누어 각 파트에 번호를 매깁니다.
- 각 파트를 개별적으로 서버에 전송합니다. 이때 여러 파트를 동시에(병렬로) 보낼 수 있습니다.
- 모든 파트 업로드가 끝나면 서버에 ‘완료’ 요청을 보내, 파트들을 순서대로 합쳐 하나의 파일로 만듭니다.
만약 특정 파트 업로드가 실패하면 파일 전체를 다시 올릴 필요 없이, 실패한 그 파트만 재전송하면 됩니다. 이는 PUT 요청을 파트 단위로 나눠 보내는 것과 유사한 개념입니다.
실무에서 왜 사용할까?
동영상, 백업 파일, 대용량 로그 파일처럼 수백 MB에서 수 GB에 달하는 파일을 다룰 때 멀티파트 업로드는 필수적입니다. 그 이유는 크게 세 가지입니다.
- 안정성: 네트워크가 불안정한 환경에서도 전체 업로드가 아닌 일부 파트만 재시도하면 되므로 실패 시 손실이 적습니다.
- 속도: 여러 파트를 병렬로 전송할 수 있어 전체 업로드 시간을 크게 단축할 수 있습니다.
- 제한 회피: 많은 서버나 클라우드 서비스는 단일 요청당 업로드 용량 제한(예: 5GB)을 두는데, 파일을 쪼개면 이 제한을 넘어서는 대용량 파일도 문제없이 업로드할 수 있습니다.
결국 멀티파트 업로드는 대용량 파일을 다루는 서비스에서 안정성과 성능을 동시에 확보하기 위한 표준적인 설계 패턴이라 할 수 있습니다.