Feature(#58): 동영상, 이미지 업로드 구현 by joojae02 · Pull Request #226 · boostcampwm2023/and01-SnapPoint

대용량 파일 업로드

기존 업로드 방식

기존 파일 업로드 흐름은

  1. 프론트에서 백으로 multipart/form-data으로 파일 담아서 전송
  2. 백은 S3로 SDK를 이용해 저장
  3. 저장한 파일의 url 반환

요런 흐름으로 파일 업로드를 진행했다 그리고 NestJS 파일 업로드 공식 문서에 있는 multer를 사용해서 구현했다

문제점

만약? 엄청 큰 무거운 파일을 업로드하게된다면?? 잘못하면 OOM이 일어날것이다

multer를 보면

WARNING: Uploading very large files, or relatively small files in large numbers very quickly, can cause your application to run out of memory when memory storage is used.

다른 방법들??

지금 Storage로 S3를 사용하고 있기 때문에

Stream 업로드

여기서 Stream 업로드는 스트림을 pipe 시켜서 s3에 다이렉트로 저장하는 방식이다

요게 업로드하는 파일 전체를 서버에 저장하지 않아서 OOM의 위험이 거의 없어진다 그래서 사실상 저장하는 파일의 크기가 무한대라고 볼 수 있다