Node.js란
Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이다.
런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있는 환경
이벤트 기반, 논 블로킹 I/O 모델이다.
이벤트 기반(event-driven)
이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식
ex) 이벤트 리스너에 콜백 함수를 등록한다.
이벤트 루프 - 이벤트 발생시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행순서를 결정하는 역할.
논 블로킹 I/O
노드의 libuv 라이브러리
JS 코드는 동시에 실행될 수 없으나 JS 상에서 돌아가는 것이 아닌 I/O(입출력) 작업은 동시에 처리될 수 있다.
논 블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
노드는 I/O 작업을 백그라운드로 넘겨 동시에 처리한다.
노드가 싱글 스레드라고 하지만 정확히 싱글스레드로 작동하진 않는다.
노드를 실행하면 프로세스가 하나 생성되고,
프로세스에서 스레드를 여러개 생성한다. 그중 직접 제어할 수 있는 스레드가 하나뿐이므로
싱글스레드로 여겨지는 것이다.
서버로서의 노드
노드는 기본적으로 싱글스레드, 논 블로킹 I/O 모델을 사용한다.
따라서, CPU 연산이 많이 요구되는 작업(이미지, 비디오 처리 등)보다는 개수는 많지만 크기는 작은 데이터를
실시간으로 주고받는 데 적합하다.
(네트워크, DB, 디스크작업 같은 I/O 작업)
다만, 싱글 스레드이기 때문에 하나뿐인 스레드가 에러로 인해 멈추지 않게 잘 관리해야 한다.
서버 규모가 커지면 nginx 등의 웹서버를 연결해야한다.
자바스크립트를 언어로 사용하기 때문에 하나의 언어로 웹사이트를 개발할 수 있다.
브라우저와 노드 서버 모두 JS를 사용하므로.
댓글