심심한잉여의 잡동사니

[Node.js] 노드js란? 본문

코딩일기/node.js

[Node.js] 노드js란?

심심한잉여 2022. 4. 26. 09:12
반응형

Node.js는 크롬브라우저에서 사용하는 JavaScript 런타임인 V8 엔진을 사용하여 만든 런타임이다.


1. 자바스크립트를 동일하게 사용하기 때문에 프론트엔드와 백엔드를 같은 언어로 처리할 수 있다.
2. 개발이 빠르다.
3. Non-blocking I/O와 단일 쓰레드 이벤트 루프를 통한 높은 처리 성능
4. 로컬에서 서버만 키기만 해도 가볍다는 것을 체감되는 가벼움
5. 이벤트 기반 비동기방식이라 서버에 무리가 없다.

여기서 말하는 Non-blocking I/O란?
예를 들어 4개의 요청이 있다고 한다면

1,2,3,4를 차례로 하나씩 응답하는 것이 아니라
비동기로 한번에 처리하기 때문에 더 빠르게 응답할 수 있는 것 부터 응답된다.

Node.js는 이러한 Non-blocking I/O로 지원되기 때문에
SNS, 채팅서비스 와 같이 한번에 요청이 많은 서비스에서 강점을 보인다.
하지만,
단일쓰레드이기 때문에 수학적 연산이나 이미지 가공과 같이
처리량이 많은 일들에 대해서는 약점을 보이는 것이 특징이다.


정리하자면

장점
- CPU를 많이 사용해야하는 작업이 아니라면 싱글 쓰레드와 Non-blocking I/O를 이용하기 때문에 빠른 성능을 가진다.
- 프로그램이 가볍기 때문에 서버 재실행도 빨라 배포나 업그레이드에 용이하다.
- JS는 자바와 같은 프로그래밍 언어보다 생산성이 좋기 때문에 같은 서버 코드라도 걸리는 시간이 적다.
- 싱글 쓰레드이기 때문에 동기화 처리 등의 복잡한 과정을 생략할 수 있다.
- 아파치 등 별도의 소프트웨어 없이 http 서버 라이브러리를 포함하고 있어 웹 서버로도 이용 가능하다
- socket.io API를 이용하면 싱글 스레드 기반 멀티 플랙싱을 기반으로 대용량 사용자에게 푸쉬 처리가 가능하다.
(WAS는 쓰레드 수 만큼만 동시 connection처리 할 수 있다.)
- 최근 인기가 급상승하여 개발자 커뮤니티에서도 많이 활성화 되어있고, npm을 통해 많은 모듈이 구현되어 있다.

단점
- 싱글 쓰레드 모델이기 때문에 하나의 작업이 시간이 많이 걸리면 전체 시스템의 성능이 급격하게 떨어진다.
- 코드의 가독성이 떨어진다. (call back 중첩)
- 직접 실행하지 않고는 에러가 나는지 확인이 어렵다.
- 멀티 코어 머신에서 CPU 사용을 최적화 할 수 없다.
- 세션 등을 공유할 경우 redis와 같은 추가 인프라가 필요하다.
- V8엔진은 GC(가비지 컬렉션)을 기반으로 메모리를 관리하기 때문에 CPU 사용량이 급격히 올라 서버가 죽을 수 있다.
- 노드 전용 모듈을 사용해야 하는데, 고급 기능이 적어 세밀한 가용성 구현이 어렵다.

개발은 빠르고 쉬우나 운영이 어렵다.

반응형