1.1 노드란
노드는 자바스크립트 런타임으로 자바스크립트 엔진인 V8로 빌드됐다.
- 노드는 서버가 아니다. 서버의 역할을 수행할 수 있고 자바스크립트로 작성된 소스 코드를 실행하는 런타임이다.
런타임이란 쉽게 말해 실행기를 뜻한다.
- 노드는 멀티 스레드 방식을 사용할 수 있지만 주로 싱글 스레드를 사용한다. 싱글 스레드의 방식을 치명적인 단점을 보완하기 위해 논블로킹 방식을 채택했다.
1.2 스레드와 논블로킹이란
프로세스 - 운영체제 내에서 할당하는 작업의 단위
스레드 - 프로세스 내에서 실행되는 작업의 단위
싱글 스레드란
- 프로세스 내에서 실행되는 단위가 한 개이다. 즉, 프로세스라는 식당의 직원의 수가 한 명이다. CPU 내의 여러 코어들 중 단 한 개만 사용한다는 뜻이고 코어가 32개라 했을 때 1개는 엄청 뜨거운 반면 나머지 31개는 차가운 상태를 유지한다는 것이다.
- 싱글스레드는 멀티스레드보다 효율성이 낮다. 하지만 멀티 스레드는 코딩 난이도가 높은 반면 싱글스레드는 상대적으로 매우 낮다. 멀티 스레드가 되는 다른 언어를 사용하는 대신 노드를 사용하는 가장 큰 이유이다. *
논블로킹이란
일부 코드를 백그라운드(다른 프로세스)에서 실행하는 방식이다.
- 멀티스레드가 한 식당에서 여러 명의 직원을 고용하여 손님의 주문을 처리한다면 싱글스레드의 논 블로킹 방식은 여러 식당에서 한 명의 직원 고용하여 손님의 주문을 처리하는 방식이다.
1.3 서버로서의 노드
서버: 네트워크를 통해 클라이언트에게 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트: 서버에게 요청을 보내는 주체(브라우저, 데스크탑 프로그램, 모바일 앱, 한 서버에서 서버로)
노드의 장단점
장점 | 단점 |
---|
싱글 스레드 방식에 비해 컴퓨터 자원을 적게 사용함 | 싱글 스레드라서 코어를 하나만 사용함 |
멀티 스레드 방식보다 쉬움 | 하나뿐인 스레드가 쉬지 않도록 해야함 |
자바스크립트를 사용함 | 어중간한 성능 |
웹서버가 내장되어있음 | 서버 규모가 커졌을 때 관리하기 어려움 |
JSON 형식과 호환하기 쉬움 | |
서버 외의 노드
노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 국한 되지 않는다.
웹, 모바일, 데스크탑 애플케이션에서도 사용
- 웹 프레임워크 - Angular, React, Vue, Meteor 등
- 모바일 웹 framework - React Native 등
- 데스크탑 개발 도구: Electron(Atom, Slack, VScode, Discord 등 제작)