When to use Node.js
- 노드는 기본적으로 싱글 스레드, 논 블로킹 모델 → I/O 요청이 많이 발생할 때에 좋음. 그러나, CPU 부하가 큰 작업에는 적합하지 않다고 함(모두 스레드 하나에서 처리되기에)
- ⇒ 개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 데 적합함
- 멀티스레드가 가능하지만 멀티스레드 프로그래밍을 하더라도 C, C++, Rust, Go 같은 언어에 비해 속도가 많이 느림
- 따라서 멀티스레드 기능이 있다고 하더라도 이미지나 비디오 처리, 혹은 대규모 데이터 처리처럼 CPU를 많이 사용하는 작업을 위한 서버로는 권장 x
- 그럼에도 굳이 노드를 사용하고 싶다면, 요즘은 AWS 람다 같은 서비스에서 노드로 CPU를 많이 사용하는 작업을 처리하는 것을 지원해 주므로 이것을 고려 가능
장점
- 노드에는 웹 서버가 내장되어 있음 (그러나 서버 규모가 커지면 결국 nginx 등의 웹 서버를 노드 서버와 연결해야만 함)
- 언어로 자바스크립트 → 웹 브라우저도 자바스크립트이므로 하나의 언어로 웹 사이트 개발 가능 (개발 생산성 획기적으로 높아짐)
- 생산성은 매우 좋지만, Go 처럼 비동기에 강점을 보이는 언어나 nginx처럼 정적 파일 제공, 로드 밸런싱에 특화된 웹 서버에 비해서는 속도가 느림
장점 | 단점 |
멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용 | 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용 |
I/O 작업이 많은 서버로 적합 | CPU 작업이 많은 서버로는 부적합 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 멈추지 않도록 관리가 필요함 |
웹 서버가 내장되어 있음 | 서버 규모가 커졌을 때 서버를 관리하기 어려움 |
자바 스크립트를 사용함 | 어중간한 성능 |
JSON 형식과 쉽게 호환됨 | ㅤ |
서버 외의 노드
- 노드는 자바스크립트 런타임이므로 용도가 서버에만 한정되지 않음
- 노드 기반으로 돌아가는 대표적인 웹 프레임워크로 앵귤러(Angular), 리액트(React), 뷰(Vue) 등이 있음