AWS | S3 Multipart Upload 사용해 보기

PC 에 있는 데이터를 Google Drive 로 백업하고 있는데, 4GiB 나 11GiB 등, 큰 용량의 파일은 브라우저를 통해 업로드 하는 것은 한계가 있다는 것을 알게 됩니다.

그래서, AWS 서비스의 S3 에 보관하기로 하고, 대용량 파일의 고속 업로드를 위해, 이론적으로만 알고 있었던 Multi Part Upload 기능을 활용해 봅니다.




1. Install AWS CLI

Multi Part Upload 는 CLI (Command Line Interface) 만을 이용해서 가능하므로, AWS CLI 를 먼저 설치할 필요가 있습니다.

* Installing or updating to the latest version of the AWS CLI

AWS CLI 설치에 대해 위의 링크에서 자세히 설명되어 있습니다.


Windows 의 경우는 아래 명령어를 Power Shell 에서 실행하면 됩니다.

msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi 

설치 확인은 aws --version 명령어를 통해 확인 가능합니다. 저는 예전에 설치했던 지라, 꽤 예전 버전이 설치된 것을 확인 가능했습니다.




2. IAM Credential

실행하는 환경은 준비 되었고, 그 실행을 위해 적절한 권한으로 AWS 에 접근하게 해줘야 합니다. 이를 가능하게 하는 것은 인증인데요. 관련 인증을 AWS CLI 에 설정해 줘야 합니다. AWS 에서는 인증 관련해서 IAM 이라는 방법이 있습니다. 아래 화면처럼 Access Key 를 설정해야 합니다. Access Key 를 설정하고, 해당 Access Key 정보를 가지고 접근하면 됩니다.


Create access key 를 클릭하면 아래와 같은 화면이 나옵니다. 어떤 활용을 위해 만드는 것인지 확인하는 과정이 나옵니다. 프로그램에서 정기적으로 접근하는 용도 등, 다양한 활용방법이 있고, 관련하여 각각 다른 설정법이 있을 듯 하니, 해당 활용에 대해 정하고 진행하는 것이 좋겠습니다.


Tag 설정을 하면, 향후 관리할 때 일괄 확인하거나 필터를 걸 수 있습니다. 이번에는 건너 뛰었습니다.


Access key 생성이 완료되면, Access key 와 짝을 이루는 Secret access key 도 함께 발행 됩니다. 이 두가지 pair 를 가지고 인증을 하게 됩니다.

반대로, 이 두 key 가 유출되면 다른 사람이 외부에서 내것처럼 사용할 수 있게 됩니다. Github 등에 본인 코드를 올리면서, 이 Access key / Secret access key 를 같이 공개하여 무단 도용되는 사례가 끊임없이 발생하고 있습니다. 한 사례를 공유해 보면, 유출된 키를 가지고 GPU 를 올려서 bitcoin 을 채굴하여 수십억원의 피해 사례도 있으니, 보안은 정말 조심해야 합니다.


IAM 에 연동된 Access key 가 하나 만들어져 있는 것을 알 수 있습니다.




2. aws configure

이제 aws configure 라는 명령어를 이용하여 설정해 줍니다. 기존에 사용하던 정보가 있었는데, 이번에 테스트 하면서 덮어 쓰기를 했습니다.


동작이 잘 되는지 확인 위해, aws s3 ls 라는 명령어를 이용하여 S3 에 올라간 파일을 검색해 보는 명령어를 실행해 봅니다. 잘 되네요. 먼저 S3 Bucket 생성을 해야 할 필요가 있습니다. 편의상 확인을 위해 먼저 보여 드린 것 입니다. 아래 과정인 "Create S3 Bucket" 과정을 먼저 진행하고 확인할 수 있습니다.




3. Create S3 Bucket

파일 전송을 위해 S3 Bucket 을 생성 합니다.




4. Command of S3 Multi Part Upload

이제 실제 파일을 올려 봅니다. 명령어는 aws s3 cp 를 하면, 기본 Multi Part Upload 가 된다고 합니다.

aws s3 cp source_file s3://s3_bucket_name/


잘 올라 가네요. 사용하고 있는 Wifi 속도만큼 아닌듯 하여, 동시에 두개를 실행합니다. 잘 되네요.


네트워크를 이용하는 어플이 어떤 것이 있는지 확인해 보는, netstat 를 실행해 봅니다. "-b"옵션은 관리자로 실행해야 한다고 해서, 관리자 모드로 실행합니다. "aws.exe" 가 https 로 통신하고 있다고 보여 줍니다.

netstat -b


관련하여 눈에 띄는 문자열을 가지고 필터를 걸어 봅니다. 한번의 명령어로 10개 세션이 default 값이며, 이는 별도 명령어 옵션을 통해 조정할 수 있다고 하네요. 따로 변경하지 않고 실행한 결과, 2개의 명령어가 동시에 통신을 하고 있으니, 20개 session 을 통해 Multi Part Upload 되고 있는 것을 확인할 수 있었습니다.

netstat -a | findstr s3-r-w


웹브라우저를 이용하여 업로드가 되지 않던, 4 GiB 파일이 잘 올라 갔습니다. 이후, 11GiB 파일도 올려 봤으며, 문제 없이 업로드 된 것을 확인할 수 있었습니다. 또한, 세션 10개를 동시에 연결하여 업로드를 쪼개서 올리니, Wifi 용량을 full 로 사용하는 것도 확인 하였습니다.


여러 session 을 동시에 연결하여, 파일을 쪼개서 업로드를 하므로, 업로드 속도를 올릴 수 있으나, 기본으로 S3 의 반응 속도가 그리 빠른 것이 아니라서, 고속 통신을 기대하고 사용하면 안되고, GiB 급 이상의 대용량 파일을 확실하게 업로드가 필요할 때에는, 필수라고 생각이 드네요.



5. Cost

S3 는 신뢰성이 높으며 비용이 저렴한 것으로 유명합니다. Standard 옵션으로 70GiB 를 저장할 경우, 얼마나 나오는지 확인해 봤습니다. 1.75 USD 라고 예상 됩니다. 업로드에 사용된 트래픽 비용은 청구가 되지 않으나, 향후 업로드 되어 있는 파일을 땡겨서 사용할 경우, 트래픽 비용청구가 된다고 합니다. 일단, 아카이브 용도로 업로드 해놓고 사용은 거의 하지 않을 예정이라, 괜찮을 듯 합니다.


이론적으로만 알고 있던, AWS S3 Multi Part Upload. 이번에 대용량 파일 archiving 이 필요하여, 실제로 이용해 봤습니다.


FIN

댓글