• multer : 파일 업로드를 위해 사용되는 미들웨어로 form-data를 다루기 위한 모듈이다.

    • multipart/form-data 에서 동작함
    • 이미지 업로드 시 buffer로 올림
  • multer-s3 : multer와 같은 내용이지만 버퍼를 다뤄주고 S3에 자동으로 올려줌

  • 인터셉터 사용 x + multer s3

    • https://medium.com/@shamnad.p.s/image-upload-to-aws-s3-using-nestjs-and-typescript-b32c079963e1
    • multer s3를 이용해 service단에 파일을 업로드하는 로직을 만들고 해당 service를 사용해서 다른 로직에서 파일을 업로드한다.
  • 그냥 참고

    • https://stackoverflow.com/questions/61402054/nestjs-how-to-upload-image-to-aws-s3
  • 인터셉터 사용 + multer s3 ⭐️

    • https://bin-repository.tistory.com/154
    • https://docs.nestjs.kr/techniques/file-upload
    • 인터셉터에 FilesInterceptor 어노테이션으로 multerOption을 달아주기만 하면 알아서 파일을 업로드해주기 때문에 자동으로 파일을 업로드해준다.
    • 업로드한 파일의 url을 해당 service단에서 DB에 저장해서 가지고 있으면서 사용하면 된다.
    • 업로드 시 파일 이름이 한글일 경우를 대비해서 url을 encoding해줘야 한다.
      • 안해줄시 aws sdk error 발생
    • 업로드시 for of vs reduce
      • https://crmrelease.tistory.com/99
  • 한가지 문제점

    • 이미지 저장하는 로직이 실패해도 object storage에는 이미지가 올라간다.
    • 그 이유는 이미지를 미리 올리고 url을 얻어서 DB에 저장해야하기 때문
    • 따라서 이미지 저장할 때 트랜잭션 오류나면 object storage에 넣은 이미지 다시 빼야하지만 object storage 특성상 저장해야만 url이 나오기 때문에 순서상 먼저 진행될 수 밖에 없음
    • 큰 문제는 아니고 그냥 object storage에 사용하지 않는 이미지가 저장되는 문제가 있다.
      • DB에는 트랜잭션이 걸려서 실패하면 url이 저장되지 않음