큰 파일 업로드에 대한 Go Fiber의 메모리 할당은 여러 가지 방법으로 node.js와 다릅니다.
1. 메모리 할당 :
-GO Fiber는 HTTP 요청을 처리하기 위해 FASTHTTP 라이브러리를 사용합니다. FASTHTTP는 고성능 및 제로 메모리 할당을 위해 설계되었습니다. 그러나 이는 처리하기 전에 전체 요청 본문을 메모리에로드하므로 큰 파일 업로드를 효율적으로 처리하지 않음을 의미합니다.
반면에 node.js는 이벤트 중심의 비 블로킹 I/O 모델을 사용합니다. 이를 통해 전체 파일을 메모리에로드하지 않고 파일 데이터를 대상으로 직접 스트리밍하여 대형 파일 업로드를보다 효율적으로 처리 할 수 있습니다.
2. Bodylimit :
-Go Fiber를 사용하면 큰 파일 업로드가 너무 많은 메모리를 소비하지 않도록 신체 제한을 설정할 수 있습니다. 이것은 섬유 구성에서 'bodylimit'을 설정하여 수행 할 수 있습니다.
-Node.js는 또한`http.maxheadersize`와`http.maxbodysize`라는 유사한 개념을 가지고 있으며, 수신 요청의 크기를 제한하는 데 사용할 수 있습니다.
3. 스트리밍 :
-GO Fiber는 박스에서 스트리밍 파일 업로드를 지원하지 않습니다. 그러나 'compress/gzip'과 같은 라이브러리를 사용하여 들어오는 파일을 압축하고 메모리 사용을 줄일 수 있습니다.
-node.js는`multer` 및`express-fileupload`와 같은 라이브러리를 통해 스트리밍 파일 업로드를 지원하므로 전체 파일을 메모리에로드하지 않고 파일 데이터를 대상으로 직접 스트리밍 할 수 있습니다.
4. 오류 처리 :
-GO Fiber는 파일 업로드 중에 발생할 수있는 모든 문제를 처리하는 강력한 오류 처리 메커니즘을 제공합니다.
-Node.js는 강력한 오류 처리 메커니즘을 제공하지만 이벤트 중심의 특성으로 인해 오류를 처리하는 것이 더 어려울 수 있습니다.
5. 성능 :
-GO 섬유는 메모리 할당 제로 및 최적화 된 성능으로 인해 일반적으로 Node.js보다 빠릅니다.
반면에 Node.js는 이벤트 중심의 비 블로킹 I/O 모델로 인해 큰 파일 업로드를 처리하는 데 더 효율적입니다.
요약하면, 큰 파일 업로드에 대한 Go Fiber의 메모리 할당은 메모리 할당 제로 및 스트리밍 파일 업로드에 대한 내장 지원 부족으로 인해 Node.js보다 효율적입니다. 그러나 GO Fiber는 강력한 오류 처리 메커니즘과 최적화 된 성능을 제공합니다.
인용 :[1] https://github.com/gofiber/fiber/issues/272
[2] https://golang.withcodeexample.com/blog/file-upload handling-golang-guide/
[3] https://stackoverflow.com/questions/34874511/node-js-is-not-a-good-option-for-file-uploads-and-lovent-loop-language
[4] https://www.reddit.com/r/golang/comments/131bq42/need_to_stream_large_files_to_s3_using_go/
[5] https://dev.to/hackmamba/robust-media-upload-with-golang-and-cloudinary-fiber-2cmf