S3의 업로드 / 다운로드 방법
。AWS Web Console, AWS SDK / AWS CLI, 일반 URL , Presigned URL
AWS SDK / AWS CLI
。어플리케이션 개발 및 OS를 통한 AWS 서비스 활용 시 주로 사용하는 방식
▶ S3 버킷 권한 정책( ex. AmazonS3FullAccess )을 가진 IAM USER or Role이 필요
일반 URL
。URL을 통해 다운로드를 수행
▶ 버킷이 PUBLIC으로 공개된 경우에만 다운로드만 가능 및 업로드는 불가능
S3에서 IAM USER를 통한 수동 업로드 / 다운로드 시 문제점
업로드 / 다운로드를 수행하는 각 사용자에게 IAM User를 할당해야하는 단점 존재

。3개의 사용자가 존재하는 경우, S3 다운로드 / 업로드를 수행하기 위한 IAM User를 3개를 만들어서 할당해야함.
▶ IAM User 갯수는 약 5000개의 제한이 존재하므로 관리가 힘듬.
업로드를 수행하는 경우

。EC2 인스턴스를 경유해서 업로드를 수행해야하므로 업로드 파일을 EC2 인스턴스로 전송하는 트래픽과 EBS Volume의 낭비가 발생하는 단점이 존재
▶ 이러한 단점을 해결하기 위해 EC2 인스턴스를 경유하지않고, 클라이언트에서 직접 URL / PreSigned URL을 통해 S3에 업로드 / 다운로드를 수행하도록 설정
PreSigned URL

。AWS S3의 파일을 안전하게 공유( 다운로드 / 업르드 ) 시 생성자가 가진 권한을 통해 S3 내 파일에 접근 가능한 서명된 임시 URL을 생성하여 공유하는 방식
。클라이언트는 미리 서명된 PreSignedURL을 활용하여 S3과 직접적으로 통신하면서 업로드 / 다운로드 수행
▶ 기존 EC2 인스턴스를 통해 업로드 / 다운로드를 수행 시 EC2 인스턴스 자원 낭비와 각 클라이언트에게 권한을 부여해야하는 단점을 개선
PreSigned URL 원리

클라이언트는 S3과 상호작용을 수행하기 위해 AWS 서버( = 생성자 )에 PreSigned URL을 요청
권한 확인 후 EC2 인스턴스 내 권한을 포함하는 Key를 가진 어플리케이션( = 생성자 )에서 서명된 PreSigned URL을 생성 및 클라이언트에게 반환
。어플리케이션의 Key는 S3 내 Key와 Key Pair를 구성
▶ 비대칭키 방식으로 어플리케이션 Key를 통해 PreSigned URL 서명 시 S3의 Key를 통해 PreSigned URL을 검증
클라이언트는 PreSignedURL을 활용해 직접 S3에 요청 시 서명 검증 후 다운로드를 수행
PreSigned URL의 특징
PreSigned URL의 만료기간을 지정하여 강력한 보안을 제공
Method ( GET : 가져오기, PUT : 업로드 )를 설정하여 S3과 상호작용이 가능
PreSigned URL의 경우 생성자가 지닌 권한 중 전체 또는 일부를 가짐
ex ) 생성자가 GET 권한이 없는 경우 PreSigned URL을 통해 S3에 GET 요청이 불가능
멀티 파트 업로드 ( Multi-Part Upload )
。클라이언트에서 AWS S3에 하나의 큰 파일을 여러 파트로 분할해서 업로드하는 방식
▶ S3에 분산 업로드 된 이후 다시 원본파일로 병합되어 저장됨
。업로드 로직이 복잡한 특징이 존재.
。멀티 파트 업로드 수행 시 사용자는 AWS S3에 업로드 시작과 업로드 완료로 총 2번 호출
。단일 큰 파일을 업로드하는 방식보다 매우 효율적으로 업로드가 가능
▶ 보통 100MB 이상의 파일을 업로드 시 멀티파트 업로드를 권장
멀티파트 업로드 원리

1. 클라이언트에서 AWS S3으로 CreateMultiPartUpload 요청을 전달하여 멀티파트 업로드 시작을 알림
。해당 요청에 멀티파트를 4개로 구성하도록 지정
2. AWS S3에서는 4개의 업로드 파트를 구성 및 각각 Upload ID를 할당
3. 클라이언트에서 해당 Upload ID를 기반으로 업로드 파트를 식별하여 파일을 분산 한 후 AWS S3으로 동시에 업로드를 시작
4. AWS S3에 각각의 업로드 파트에서 모두 업로드가 완료된 경우 클라이언트에서 AWS S3으로 CompleteMultipartUpload를 전달하여 멀티파트 업로드 완료를 알림
5. AWS S3에서 업로드된 파트 파일을 원본파일로 병합 및 저장
멀티파트 업로드 특징
- 장점
。하나의 큰 파일을 다중으로 분산하여 업로드를 수행하므로 단일 파트 업로드에 비해 속도가 빠르다.
。오류로 인해 업로드가 종료되는 경우, 해당 부분부터 업로드 재개가 가능
- 단점
。업로드 로직이 단일 파트 업로드에 비해 복잡함.
。파트 파일 업로드에서 업로드 시 지금까지 어떤 파트 파일을 업로드했고, 어떤 것을 업로드 해야하는지 어플리케이션에서 관리해야한다.
멀티파트 업로드가 중지되거나, 업로드 이후 병합되지 않을 경우, 업로드된 파트 파일은 S3 내 잔류 및 추가비용 발생
。 S3 Storage Lens 등의 서비스를 통해 완료되지 않은 멀티파트 업로드 파일을 확인 가능
▶ 실패한 멀티파트 업로드 파일의 경우 S3 수명주기규칙 작업을 설정하여 통해 자동으로 삭제처리
。S3 생명주기 설정을 통해 일정 기간이 소요된 이후 삭제 가능
ex ) 완료되지 않은, 멀티파트 업로드의 경우 7일 후 삭제
S3 업로드 / 다운로드 구현
。백엔드 : Lambda 기반
。프론트엔드 : React 기반
▶ AWS CLI / AWS Profile 활용
IAM User의 Access Key 생성
。IAM USER -> 보안자격증명 -> 액세스 키에서 액세스 키 생성
▶ 기타로 체크