Node.js와 Springboot: Hello World 성능 비교
성능 비교에 대한 탐구를 계속하면서 이 기사는 Node.js와 Springboot에 관한 것입니다. 스프링 부트는 주로 웹 서비스에 사용되는 Java를 기반으로 구축된 경량 서버 기술입니다. Spring Boot를 사용하면 "그냥 실행"할 수 있는 독립 실행형 프로덕션 등급 Spring 기반 응용 프로그램을 쉽게 만들 수 있습니다. 스프링 부트는 자바 세계에서 꽤 인기가 있습니다.
간단한 Hello World 사례에서 누가 더 빠르다고 생각하십니까? Node.js가 해석되는 동안 바이트 코드로 컴파일되기 때문에 대답은 Springboot일 수 있습니다. 정답을 찾는 데 관심이 있다면 계속 읽어보세요. 당신은 놀랄지도 모릅니다!
설정
테스트는 16G RAM이 장착된 MacBook Pro M1에서 실행됩니다. 테스트는 잘 알려진 HTTP 테스터인 Bombardier를 사용하여 실행됩니다 . 테스트는 50, 100 및 200개의 동시 연결에 대해 실행됩니다.
버전은 다음과 같습니다.
- Node.js v19.6.0
- Java17을 사용하는 Springboot 3.0.2
Node.js
Node.js 코드에는 Spring의 기본 서버에서 제공하는 기능과 동일하게 만드는 최소한의 라우터가 있습니다.
import http from "node:http";
http.createServer((req, resp) => {
try {
if (req.method !== "GET") {
return resp.writeHead(405).end();
}
if (req.url !== "/") {
return resp.writeHead(404).end();
}
resp.writeHead(200, {
"content-type": "text/plain",
});
resp.end("Hello world");
} catch (e) {
resp.writeHead(500).end();
}
}).listen(3000);
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/")
public String handleRequest() {
return "Hello World!";
}
}
각 동시성 수준에 대해 총 5M(5백만) 요청이 실행됩니다.
다음 측정이 수행됩니다.
- 걸린 시간
- 초당 요청
- 대기 시간 : 평균, 중앙값, q25, q75, q90, 최대(밀리초 단위)
- 시스템 사용량 : 평균 CPU 및 메모리 사용량
다음은 각 측정 유형에 대한 결과를 나타내는 차트입니다.
(모든 대기 시간은 밀리초 단위입니다.)
내 분석
첫째, Spring/Java는 매우 리소스 집약적인 애플리케이션입니다. 200개의 동시 연결이 있는 간단한 Hello World 사례의 경우 Spring은 ~190% CPU와 470M 메모리를 사용합니다. 상대적으로 Node.js는 95% CPU와 82M 메모리를 사용합니다.
이제 대기 시간의 경우 Spring의 대기 시간은 3사분위까지 Node.js보다 낮습니다. Node.js의 최대 대기 시간은 123ms에 도달하는 반면 Spring은 최대 대기 시간 판독값이 초 단위로 실패하면서 실패합니다. Spring의 평균 대기 시간(0.6ms)도 Node.js(2.5ms)보다 훨씬 낫습니다.
결론적으로 Node.js는 훨씬 적은 시스템 리소스를 사용하여 더 많은 RPS를 제공합니다.
업데이트 : 이 기사가 커뮤니티에서 꽤 인기를 끌면서 Node의 기본 서버와 Springboot 같은 프레임워크를 비교하는 것은 불공평하다는 의견을 받았습니다. 매우 유효한 포인트입니다. Express와 Fastify를 Springboot와 비교하는 기사를 이미 게시했습니다. 링크는 다음과 같습니다.

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































