티스토리 뷰

개발

Java Spring vs Node.JS 비교

IT편집자 2021. 3. 9. 11:43

 

Java Spring

 

소개

spring webflux를 사용하지 않고 mvc를 사용하여 개발한다면, 하나의 요청 하나당 하나의 스레드가 생성되고 처리를 완료하여 응답할때까지의 과정을 담당한다. 즉, 만약 서버 메모리가 4 GB의 용량을 가지고있고 하나의 스레드가 2MB의 크기를 가진다면, 동시에 최대 2000개의 요청을 핸들링할수 있음을 의미한다. 스레드간의 context교환이 발생할경우에도 자원이 소모된다.

장점

  • 크기와 부하의 측면에서 경량이다.
  • Spring이 안정적이라는 말을 많이 한다. 그 이유는 레퍼런스가 많아 이슈를 쉽게 해결할 수 있고, 자유성이 낮다는 점에서 안정적이라고 생각한다.
  • 스프링은 2002년 로드 존슨이 최초로 개발하였기에 Spring을 다루는 개발자가 많아 인력 문제도 없다.
  • 많은 개발자들이 오랫동안 사용하고 유지해왔기 때문에 알려진 버그와 보안 문제는 많이 잡혀있어서 안정성이 우수하다.
  • 정형화된 패턴이 있다.
  • IOC/ DI로 느슨한 결합도를 유지한다.
  • 자유도는 낮지만 안정적이다.

단점

  • 설정이 복잡한 편이다.
  • 자원활용이 비교적 좋지못하다.

 

 

NodeJS

 

nodejs는 클라이언트의 모든 요청을 이벤트루프(싱글스레드)로 받아, 모든 요청을 비동기로 스레드 풀에 존재하는 스레드에게 보낸다. I/O작업을 완료한 작업스레드가 작업이 완료되었다는 이벤트를 emit하면 이벤트루프가 이를 처리한다.

장점

  • V8 엔진을 기반으로 한 성능이 뛰어나다.
  • 싱글스레드, 비동기 IO 처리에 기반한 빠른 속도를 가진다.
  • 파일 I/O나 네트워크 처리를 이벤트 드리븐 방식으로 처리하기 때문에 빠른 처리가 가능하다.
  • CPU의 대기시간을 최소화 할 수 있다.
  • CPU 부하가 적고, 많은 커넥션을 동시에 처리해야 하는 구조에 적합하다.
  • 자바스크립트를 이용해서 개발할 수 있기 때문에 프론트엔드 개발자의 진입장벽이 낮다.
  • 기존 Java 서버에 비해 생산성이 훨씬 높다.

 

단점

  • 멀티코어 활용을 위해서 cluster 모듈을 이용해야 하고, 세션을 공유할 경우 부가적인 작업이 필요하다.
  • 비동기 제어가 까다롭다.

 

보완기술

Spring Webflux

  • Spring 5에서 도입된 기술
  • Spring WebFlux는 Node.js와 유사하게 완전한 비동기-논블러킹 방식의 I/O 작업이 가능하고, 이를 제어하기 위한 Event Loop가 존재함.
  • Multi-Thread 방식
  • Spring MVC처럼 각 요청에 하나의 Thread가 대응 되지 않고 다수의 요청을 처리하는 구조

 

NestJS

  • asynchronous-providers를 사용한 비동기제어
  • 참고자료

 

댓글