[AWS] S3 멀티 파트 업로드란?
IT/AWS

[AWS] S3 멀티 파트 업로드란?

반응형

멀티파트 업로드란?

  • Amazon S3에 업로드를 할 때 단일 객체를 S여러 부분으로 나누어 업로드하여 처리량 향상 및 네트워크 문제의 빠른 복구와 같은 이점을 얻을 수 있는 업로드 방법을 말합니다.
  • s3에 업로드할 수 있는 객체의 최대 크기는 5G입니다. S3에 업로드를 할 때 일반적으로 객체 크기가 100MB에 도달하면 단일 작업으로 객체를 업로드하는 대신 멀티파트 업로드 사용을 고려해야 하는데요
  • 멀티파트 업로드를 이용하면 최대 5TB의 객체를 업로드할 수 있고, 큰 객체를 여러 조각으로 나누어 병렬 처리하기 때문에 빠르게 업로드할 수 있습니다.
  • 객체를 나누어 업로드하기 때문에 일부분만 업로드된 경우에는 객체가 S3에 표시되지 않을 수 있습니다. 이것을 불완전한 멀티파트라고 합니다. 이 불완전한 멀티파트는 S3의 용량을 차지하고 있기 때문에 비용이 발생하므로 Lifecycle규칙이나 aws cli를 활용해 삭제해 주어야 합니다.

불완전한 멀티파트 업로드란?

  • 전체 멀티파트 업로드 요청이 성공적으로 전송되지 않으면 Amazon S3는 해당 부분을 객체로 생성하지 않으며 멀티파트 업로드가 완료되거나 중단될 때까지 Amazon S3 버킷에 남아 비용이 과금 됩니다.

불완전한 멀티파트 업로드를 확인하는 방법

aws cli 에서 aws s3api list-multipart-uploads --bucket BUCKET_NAME 명령어를 통해 확인이 가능합니다. 또는 AWS콘솔의 S3 storage Lense를 통해 확인이 가능합니다.

불완전한 멀티파트 업로드를 제거 하는 방법

위에서 멀티파트 업로드를 확인하고 확인된 멀티파트 업로드 ID를 갖고 aws s3api abort-multipart-upload --bucket YOUR_BUCKET_NAME --key YOUR_OBJECT_KEY --upload-id YOUR_UPLOAD_ID 명령어로 제거해주면 됩니다.

또는 s3 lifecycle에 아래와 같이 멀티파트 업로드 삭제 옵션을 사용할 수 있습니다.

멀티파트 업로드의 장점

  • 대용량 객체 처리: 큰 파일을 여러 부분으로 나누어 업로드하므로, 전체 파일을 메모리에 로드할 필요가 없습니다. 이로 인해 대용량 객체를 처리할 수 있습니다.
  • 재시도 및 일부 재전송: 네트워크 오류 또는 실패가 발생할 경우 해당 부분만 다시 전송하면 되므로 전체 객체를 다시 업로드할 필요가 없습니다.
  • 병렬 업로드: 여러 부분을 병렬로 업로드하여 전송 속도를 향상시킵니다.
  • 객체 덮어쓰기 방지: 모든 부분이 성공적으로 업로드되면 S3에서 객체를 조립하고 완전한 객체로 저장합니다. 모든 부분이 업로드되지 않으면 S3에서 객체를 조립하지 않으므로 불완전한 객체가 저장되는 것을 방지합니다

멀티파트 업로드 하는 방법

  • aws s3 cp, sync 명령어를 사용하면 자동으로 멀티파트 업로드를 수행합니다.
  • aws s3api 명령으로 멀티파트 업로드가 가능하며 이 명령어는 cp, sync 보다 좀 더 세부적인 제어가 가능합니다. 예를 들어, 아래와 같이 특정 파일의 메타데이터를 설정하거나, ACL(Access Control List)을 설정하거나, 버킷 정책을 업데이트하는 등의 세부 설정 작업을 수행할 때 사용될 수 있습니다
aws s3api put-object --bucket your-bucket-name --key your-object-key --metadata "key1=value1,key2=value2" --body your-file.txt

그러면 aws s3 cp와 sync 명령어가 멀티파트를 자동으로 지원해주는데 aws s3api create-multipart-upload 로 멀티파트 업로드를 해야하는 이유는 무엇일까요?

aws s3api 로 멀티파트 업로드를 해야하는 경우

aws s3 cp와 aws s3 sync 명령어는 Amazon S3에 파일을 업로드하는 데 있어서 내부적으로 멀티파트 업로드를 자동으로 처리하기 때문에 사용자는 명령어를 실행할 때 별도로 멀티파트 업로드를 구현하거나 세부적으로 제어할 필요가 없습니다. 보통의 경우에는 aws s3 cp나 aws s3 sync 명령어를 사용하는 것이 편리하며, 멀티파트 업로드를 직접 다룰 필요는 없습니다.

하지만 aws s3api create-multipart-upload를 직접 사용해야 하는 상황이 있을 수 있습니다. 몇 가지 예시는 다음과 같습니다:

  • 커스텀한 업로드 로직 필요: 특별한 업로드 로직이 필요하거나 특정한 제어를 해야 할 경우, aws s3api 명령을 사용하여 직접적으로 멀티파트 업로드를 조작할 수 있습니다.
  • 세밀한 제어 제어가 필요한 경우: aws s3 cp 및 aws s3 sync 명령어는 기본적인 업로드 옵션을 제공하며, 대부분의 일반적인 사용 사례에 대한 간편한 인터페이스를 제공합니다. 그러나 특정한 요구사항이나 커스텀한 업로드 시나리오에 따라 직접적인 제어가 필요할 때, aws s3api 명령을 사용할 수 있습니다.
  • 진행 중인 멀티파트 업로드를 중단하고 재개해야 하는 경우: aws s3api 명령을 사용하여 멀티파트 업로드를 중단하고, 나중에 필요한 경우 해당 업로드를 재개할 수 있습니다.
  • 다른 AWS 서비스와의 통합: 다른 AWS 서비스와 통합하거나 자동화할 때 특정 API 호출이 필요한 경우 aws s3api를 사용할 수 있습니다.

요약하자면, 대부분의 일반적인 업로드 작업에 대해서는 aws s3 cp나 aws s3 sync 명령어를 사용하는 것이 간단하고 편리합니다. 하지만 특별한 경우나 세밀한 제어가 필요한 상황에서는 aws s3api 명령어를 사용할 수 있습니다.

반응형