심플 웹 서버 언어 별 성능 비교 (Go, Rust, Node.js)

"Ukiyo-e painting of The zebras running over the cherry blossoms in the jungle with Bao Bab." from DALL-E 2

테스트 환경

이름 설명
CPU AMD Ryzen 7 1700
Memory DDR4 32GB

테스트 툴

autocannon

 

autocannon

Fast HTTP benchmarking tool written in Node.js

www.npmjs.com

옵션

  • 동시요청 : 2500
  • 요청시간 : 30초
  • 파이프라이닝 : 4
> autocannon -c 2500 -d 30 -p 4 127.0.0.1:8081

테스트 대상

  • (Node.js) express
  • (Node.js) hyper-express
  • Go
  • Rust

테스트 방법

  • 각 웹서버는 '/' path 만 구현되어 있으며, 요청 수신 시 Hello를 응답한다.
  • 각 웹 서버 별 30초 동안 요청 처리 개수를 측정한다.

결과

  • 예상대로, express가 가장 낮은 성능을 보여주었다. 추가적으로, 타임아웃 에러가 928건 발생하였다.
  • rust와 golang은 거의 동일한 성능을 보여주었다.
  • rust와 golang은 express보다 약 2배 빠른 성능을 보여주었다.
  • hyper-express는 Node.js 임에도 가장 좋은 성능을 보여주었다.
  • hyper-express는 golang과 rust보다 약 1.3배 빠른 성능을 보여주었으며, express보다 약 2.7배 빠른 성능을 보여주었다.

결론

  • Node.js라고 해서 rust나 golang보다 느린 것이 절대 아니며, 웹 서버 라이브러리마다 성능이 다를 수 있다.
  • rust와 go는 유사한 성능을 보여주었다.
  • express는 매우 느리다.
  • hyper-express는 매우 빠르다.