jongviet

Aug 6, 2021 - node.js express vs java spring 차이? 본문

node, express, nestjs

Aug 6, 2021 - node.js express vs java spring 차이?

jongviet 2021. 8. 6. 17:10

*8월6일

-node.js에 대한 속성 강의 하나를 듣고, node.js express와 java spring의 차이점이 궁금해서 구글링을 통해 확인해봤다.

-결론부터 말하자면 구현하려는 서비스에 적합한 것을 선택하는 것이 맞고, 어느 것이 더 좋다, 좋지 않다는 의미가 없다고 한다.

-spring은 java를 기반으로한 대표적인 프레임워크로 한국에서 사용량이 압도적으로 많다. 대부분 백엔드 관련 학원에서도 java/spring을 메인으로 가르치고, 나 또한 그 과정을 수료했다.

-express는 spring과 같이 node.js 기반 프레임워크 중 하나이다. express외에 socket.io, koa, nest(당근마켓이 사용한다고 함) 등이 있다고 한다.

 

*multi-thread와 single-thread

-Spring은 multi-thread를 두어 다중 요청을 처리한다. 각 요청마다 별개의 thread가 해당 요청을 응답까지 책임지는 구조이다. 그에 반해 node.js는 single-thread로 요청을 처리하는 구조이다. single-thread로도 빠른 속도가 나오는 이유는 비동기 non-blocking I/O 덕분이라고 한다. 상대적으로 긴 시간이 드는 I/O 작업을 기다리지 않고 client의 요청과 응답만을 담당하기 때문에 높은 퍼포먼스가 보장됨.

->이러한 node.js의 강점이 보장되려면 1)많은 처리를 동시에 처리하도록 요구 받는 환경, 2)잦은 I/O 작업, 3)단순한 CPU 작업이 전제 조건이라고 한다. 하지만 I/O 작업이 많지않고 강도 높은 CPU 연산에 계속해서 요구된다면 single-thread를 활용하는 node.js는 100% 실력을 발휘할 수 없는 구조가 된다.

->java도 이러한 차이점을 인지하고 Spring WebFlux를 통해 비동기 non-blocking I/O를 가능하게 함. 다만 single이 아닌 multi-thread 방식이라는 차이가 있음.

 

*동기 vs 비동기 I/O

-동기 I/O 처리에서는 thread는 요청이 완료될때까지 또는 응답이 완료될 때까지 무조건 기다려야함. 하지만 비동기 I/O에서는 요청이나 응답만 전달하고, 다른 작업을 하러 가는 구조이다. 

-실 생활에 가장 가까운 스트리밍 서비스가 비동기 I/O를 통해서 잘 구현되는데, 이를 통해 데이터를 수신하는 동안에도 영상을 재생하는 구조가 이루어질 수 있다. 동기 I/O를 사용하게되면 모든 데이터가 다운 될 때까지 기다린 후, 재생할 수 있다.

 

*동시성, JSON data처리

->동시성 관리 측면에 있어서, 클라이언트들이 단순한 조회 or 간단한 text만 전달 하는 경우 node.js가 유리하다.

->mongoDB와 같은 JSON 기반 no-sql DB를 사용하는 경우, 별도의 변환 과정이 없기에 node.js가 유리함. 그에 반해 java는 JSON 데이터를 읽고 쓸 때, JSON 변환 과정이 추가됨.

Comments