티스토리 뷰

이번 개발건에 대용량 파일 업로드가 있어서 대리님이 실험을 해보라고 하셨고, 위 세 가지를 이용하여 테스트해보았다.

Case#1 MultipartFile.getByte

 multipartFile.getByte로 바이트배열을 받고 그 바이트배열을 FileOutputStream을 이용하여 쓰는 방법이다.

1기가 파일을 업로드한다고 했을 때 위와 같은 결과가 나왔다. 항목에 대해 설명하자면, 첫번째 Max Heap은 최대 Heap 사이즈, used(before)은 작업 전 Heap 사이즈, used(after)는 작업 후 Heap 사이즈, used(gc-after)는 GC 후 Heap 사이즈이다. 위와 같은 경우, 작업 후에 메모리를 많이 차지하는 걸 알 수 있다.

Case#2 MultipartFile.transferTo

multipartFile에서 지원하는 transferTo를 사용하는 방법이다.

내부가 어떻게 구현되어있는지 봤는데 내부적으로 FileCopyUtils.copy를 사용하는데, 이것도 더 들어가보면 inputstream과 outputstream을 사용하고 있다. 그리고 더 깊게 들어가면 StreamUtils.copy를 사용한다.

Case#3 MultipartFile.getInputStream

마지막으로 MultipartFile에서 Inputstream을 얻어서 쓰는 파일을 쓰는 방법이다.

(왼)테스트를 위해 작성한 Case#3 코드/(오)Case#2에서 최종적으로 사용하는 StreamUtils.copy

살펴보다가 정말 재미있는걸 발견했는데 사실 테스트를 위해 작성한 코드와 Case2#에서 최종적으로 사용하는 StreamUtils.copy메서드가 거의 똑같다는것이다.

이렇게 테스트를 해서 어떤 방법을 사용할지는 결정했는데 궁금한 게 또 생겼다. Case#1 MultipartFile.getByte에서는 작업이 다 끝나도 메모리를 계속 차지하고 있는데, 왜 Case#2와 Case#3은 그렇지 않을까? 더 찾아봐야겠다.

300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함