문제상황

원인분석
+--------+ +---------+ +----------------------+
| Client | | Server | | NCP Object Storage |
+--------+ +---------+ +----------------------+
| | |
| 1. 파일 전체 스트림 ->|
| | |
| | 2. 메모리/버퍼 적재 |
| | 3. 단일 업로드 ----------->|
| | |
해결
Presigned URL + Multipart Upload (청크 업로드) 방식 구현
+--------+ +---------+ +----------------------+
| Client | | Server | | NCP Object Storage |
+--------+ +---------+ +----------------------+
| | |
| 1. 파일명, 크기 전달 | |
|------------------>| 2. create multipart |
| |------------------------>|
| |<-- (Upload ID, URL 발급) |
| 3.Upload ID + URL | |
|<------------------| |
|=============================================|
| [ 이제 서버를 거치지 않고 직접 저장소로 ] |
|=============================================|
| | |
| 5. [조각 1] 전송 --------------------------->| (URL 1 사용)
| 6. [조각 2] 전송 --------------------------->| (URL 2 사용)
| 7. [조각 3] 전송 --------------------------->| (URL 3 사용)
| N. [조각 N] 전송 --------------------------->|
| ... | |
| 8. 다보냈으니 합침 요청| |
|------------------->| 9. complete multipart |
| |----------------------->|
| 10. 업로드 완료 |<--- (최종 파일 생성) |
|<-------------------| |
결과
| 영상 크기 | 스트리밍 업로드 | Presigned URL + Multipart |
|---|---|---|
| 1 MB | 349 ms | 514 ms |
| 4 MB | 443 ms | 944 ms |
| 20 MB | 1,991 ms | 2,925 ms |
| 45 MB | 4,022 ms | 6,657 ms |
| 133 MB | OutOfMemory (불가) | 14,583 ms |
| 613 MB | OutOfMemory (불가) | 63,604 ms |
| 719 MB | OutOfMemory (불가) | 75,410 ms |
추가사항
데이터 저장량 요금(파일 저장되어 있는 동안)

API 요청 수 요금(PUT / GET 요청 횟수)

네트워크 전송 요금


.m3u8 플레이리스트.ts (or fMP4) 조각 파일