노드를 통해 다양한 자바크립트 애플리케이션을 실행할 수 있지만, 노드는 서버 애플케이션을 실행하는데 제일 많이 사용한다.
서버는 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.
서버는 클라이언트의 요청에 대해 응답한다. 그래서 노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.
Node.js 는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임 입니다.
이벤트가 발생할 때, 미리 지정해둔 작업을 수행하는 방식.
“이벤트 리스너(Event Listener)에 콜백(callback) 함수를 등록한다.” 는 말은,
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두는 것을 의미한다.
논블로킹이란 ?
이전 작업이 완료 될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
즉, 작업들이 모두 동시에 처리될 수 있는 작업이며, 같은 작업을 더 짧은 시간안에 처리할 수 있다.
블로킹이란 ?
이전 작업이 끝나야만 다음작업을 수행하는 것을 의미한다.
setTimeout(callback, 0) 은 코드를 논 블로킹으로 만들기 위해 사용하는 기법 중 하나.
노드에서는 동기와 블로킹, 비동기와 논블로킹이 서로 유사하다는 것만 알아두자.
스레드가 하나뿐이라는 의미. 자바스크립트 코드가 동시에 실행될 수 없는 이유이기도 함.
노드 서버의 장단점은 싱글 스레드, 논 블로킹 모델의 장단점과 크게 다르지 않다.
노드 사용자들이 말하는 가장 큰 장점은 언어로 자바스크립트를 사용한다는 것이다. 이것이 생산성이 중요한 기업이 노드를 채택하는 이유이다. 하지만 로드 밸런싱에 특화된 웹 서버에 비해서는 속도가 느리다.
노드 기반으로 돌아가는 대표적인 웹 프레임워크는 앵귤러(Angular), 리액트(React), 뷰(Vue) 등이 있다.