Node.js는 Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임(실행창)입니다.
런타임이란?
특정 언어로 만든 프로그램을 실행할 수 있는 환경
- JavaScript를 서버에서도 사용할 수 있도록 만든 프로그램이다.
- V8이라는 JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)이다.
- 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.
사용 이유
- Javascript를 브라우저에서 독립시켜 브라우저와 무관한 프로그램을 만들기 위해서
-> 즉, JS라는 한가지 언어를 사용하여 Client - Server를 만들수 있다.
특징
이벤트 기반
- libuv 라이브러리를 사용하여 이벤트 기반, Non-blocking I/O 모델을 구현하고 있다.
- 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 등록한 이벤트를 이벤트 리스너에 콜백함수로 등록한다.
이벤트 루프
- 여러 이벤트가 동시에 발생시 콜백함수 호출의 우선순위를 정하여 처리한다.
- 이벤트가 종료될때 까지 처리를 위한 작업을 반복한다.
Non-blocking I/O
- 함수 호출시 어느곳에 쌓아두고 비동기적(논블록킹)으로 처리하여 요청이 완료된 순서대로 처리(스택이용)한다.
싱글 스레드
- node는 싱글스레드이기 때문에 논블록킹방식을 사용하여 요청이 들어온 순서가 아닌 작업이 완료된 순서로 처리한다.