꼬꼬마 블로그

꼬꼬마의 기술 블로그

백엔드를 개발할때 어떤 기술을 사용할지 항상 고민됩니다. 주로 Spring과 NodeJS를 많이 비교하는데 둘의 차이점을 통해 상황에 맞는 기술을 선택할 수 있도록 글을 작성해보겠습니다.

Spring과 NodeJS의 차이점에 대한 글입니다.

Spring

Spring은 멀티쓰레드기반입니다.

위와 같이 동작합니다. 하지만 이때 하나의 요청에 하나의 쓰레드가 사용됩니다. 만약 IO 데이터를 가지고 오는 시간이 오래 걸린다면 어떻게 될까요?

 

스레드가 오랬동안 IO의 응답을 기다리고(블로킹) 그동안 자원이 낭비됩니다. 더 많은 스레드가 동작한다면 Context Switching이 빈번히 발생되며 이로인해 성능이 저하됩니다.

NodeJS

NodeJS는 싱글스레드/비동기 기반입니다.

더러운 애니메이션 죄송합니다..

위와 같이 하나의 스레드가 클라이언트의 요청만을 담당하고 IO작업은 모두 비동기로 처리합니다. 이로인해 많은 IO가 있는 작업을 Spring에 비해 더 빠르게 처리할 수 있습니다.

 

하지만 하나의 작업 자체가 시간이 많이 소요된다면 시스템 전체의 성능이 급격히 떨어집니다. 그로인해 CPU를 많이 사용하지 않는 작업 위주로 개발되어야합니다.

 

정리

Spring은 IOC, DI가 잘 지원된다던가 많은 래퍼런스가 있다는 장점이 있고 NodeJS 역시 탁월한 생산성과 같은 장점이 있습니다.
하지만 이번 글에서는 멀티스레드와 싱글스레드의 차이에 대한 장/단점을 알아보았습니다.

 

NodeJS가 Spring보다 더 좋은 성능을 내기위해선 많은 IO를 처리해야되며 CPU를 많이 사용하지 않는 작업을 수행해야된다는 조건이 있습니다.