Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

Amazon S3 대용량 파일 분할 업로드 가이드: 멀티파트 업로드 완벽 정리

Amazon S3에서 초대용량 파일을 저장하는 방법

Amazon S3에 수십 기가바이트(10GB 이상)에 달하는 초대용량 파일을 저장해야 하는 경우가 종종 있습니다. 이럴 때는 사전에 구성된 가상 머신(EC2 인스턴스)을 활용하면 효율적으로 처리할 수 있습니다. 단순히 하나의 요청으로 거대한 파일을 전송하는 것은 네트워크 불안정, 타임아웃 등 다양한 문제를 일으킬 수 있기 때문입니다.

HTML5 파일 API를 활용한 클라이언트 측 파일 분할

HTML5 파일 API(File API)를 사용하면 매우 큰 파일을 클라이언트(브라우저) 측에서 작은 조각(chunk)으로 나눌 수 있습니다. 사용자가 선택한 파일을 메모리에 한 번에 올리지 않고도 Blob 객체를 슬라이스하여 순차적으로 서버에 전송하는 방식입니다.

이 방식은 다음과 같은 장점이 있습니다.

  • 메모리 사용량을 크게 줄여 브라우저 과부하를 방지합니다.
  • 업로드 중 오류가 발생해도 해당 조각만 재전송하면 됩니다.
  • 업로드 진행률을 세밀하게 표시할 수 있어 사용자 경험이 향상됩니다.

서버의 역할: 조각 병합 후 S3로 최종 전송

클라이언트에서 분할 전송된 파일 조각들은 서버에 도착하면 하나로 합쳐져야 합니다. 즉, 서버는 각 조각을 수신하고 순서대로 병합한 뒤, 완성된 전체 파일을 S3 버킷으로 옮기는 역할을 담당합니다.

다만 이 아키텍처를 사용하려면 클라이언트와 통신하는 웹 애플리케이션과 S3로 파일을 전송하는 애플리케이션, 총 두 개의 앱을 유지·관리해야 한다는 점을 고려해야 합니다.

EC2와 S3 간 데이터 전송 비용은 무료

다행히 동일 리전 내 EC2와 S3 사이의 데이터 전송에는 비용이 발생하지 않습니다. 따라서 EC2 인스턴스에서 S3로 대용량 파일을 옮길 때 데이터 전송료 걱정 없이 운영할 수 있습니다. 다만 리전 간 전송이나 인터넷으로의 아웃바운드 전송에는 요금이 부과되므로, 아키텍처 설계 시 같은 리전 내 배치를 권장합니다.

멀티파트 업로드(Multipart Upload)의 강력한 오류 복구 기능

Amazon S3가 제공하는 멀티파트 업로드(Multipart Upload) 기능을 활용하면 안정성이 더욱 높아집니다. 여러 개의 파트로 나누어 업로드하는 중 특정 청크(chunk) 전송에 실패하더라도, 전체 업로드를 처음부터 다시 시작할 필요 없이 실패한 파트만 재시도할 수 있습니다.

또한 AWS SDK는 각 파트의 업로드 상태를 추적하고, 병렬로 여러 파트를 동시에 전송하여 업로드 속도를 크게 향상시킬 수 있습니다. 참고로 멀티파트 업로드에서는 마지막 파트를 제외한 각 파트의 최소 크기가 5MB이며, 완료 호출(CompleteMultipartUpload)을 통해 모든 파트가 하나의 객체로 결합됩니다.

5GB 파일을 1024개 파트로 나누어 독립적으로 업로드하기

예를 들어 5GB 크기의 파일이라면 이를 1024개의 개별 파트로 분할하여 각각 독립적으로 업로드할 수 있습니다. 각 파트는 약 5MB 크기가 되며, 이렇게 하면 다음과 같은 이점이 있습니다.

  • 네트워크가 불안정해도 실패한 파트만 빠르게 재업로드할 수 있습니다.
  • 여러 파트를 동시에 전송해 전체 업로드 시간을 단축할 수 있습니다.
  • 파트별 업로드 결과를 확인하여 신뢰성 있는 전송을 보장할 수 있습니다.

결론적으로, Amazon S3에 대용량 파일을 업로드할 때는 HTML5 파일 API로 클라이언트에서 파일을 분할하고, 서버 또는 AWS SDK의 멀티파트 업로드 기능을 통해 조각들을 관리·병합하는 것이 가장 안정적이고 효율적인 접근 방식입니다.