결론부터 말하면 버그가 아니었음
그저 multer의 병신같은 동작방식을 몰라서 문제가 생겼던거 였는데
오늘 이것저것 테스트 해보다가 multer 커스텀 스토리지가 어떤 방식으로 동작하는지 알아냈음
먼저 multer 커스텀스토리지가 실제 파일처리를 담당하는
_handleFile 하고 에러가 났을때 실행시킬 _removeFile 이라는게 필요함
일단 무조건 _handleFile을 실행시키고 만약 에러가 발생했다면 _removeFile을 호출해서
업로드했던 파일을 삭제시키는 방식임
만약에 내가 파일 리밋을 2메가로 설정하고 3메가 짜리 파일을 올린다면 무 슨 일이 생기냐면
_handleFile로 파일 업로드를 시킴 근데 시발 파일크기를 먼저 판단하고 에러를 내놓는게 아니라
리밋 크기만큼 2메가로 지멋대로 잘라서 올려버림 그다음 에러가 생겼나 판단을 하는거임
워따 방금 올린파일의 실제 크기가 2메가가 넘는당께?
그라믄 _removeFile 호출해서 지워 부러잉
이렇게 된거 였음 근데 공식문서에도 이게 이딴식으로 동작한다 라는 설명 없었고
난 단지 '서버에 파일 저장할거도 아니니까 굳이 구현할 필요없겠지' 하고 removeFile을 작성을 안했더니
파일 올리고나서 에러 터져서 removeFile 호출했는데 구현이 안돼있으니까 그냥 멈춰버렸던거임
내가 어제 올렸던 파일 리밋이 넘었는데 리밋크기에 딱 맞춰서 s3에 업로드 됬던것도 이런 이유였던거
그리고 multer-s3 라는 서드파티 패키지 라고
내가 직접 구현하려고했던 s3에 직접 업로드하는 커스텀스토리지 만들어놓은게 있음
실제로 여기에 구현된 _removeFile 보면 일단은 s3에 업로드가 됬던 파일 에러가 나면 지워 버리는 코드써져있음 ㅋㅋㅋㅋㅋㅋㅋ
근데 시발 이딴식으로 동작하면 파일이 잘못된거라도 무조건 s3에 올리고 나서 에러 있나 판단하고 에러 있으면
다시 s3에서도 지워 버리라는 방식이네 ㅋㅋㅋㅋㅋㅋㅋ
2시간 부여잡고 이것저것 테스트하다 알아냈는데
직접 분석하는것도 나름 재미있네
여러모로 병신같노ㅋㅋㅋ
파일사이즈 기가바이트단위 되는놈 다 메모리에 처넣을수는 없으니까 구현이 저런거 아니냐?