Node로 프로젝트 시작 전 개념 정리하기 위한 글
이벤트가 발생했을 때, 저장해둔 작업을 수행하는 방식으로 이벤트 리스너에 미리 콜백함수를 저장해두고 입력된 이벤트에 따라 해당 작업을 수행
조금은 구체적인 이야기
자바스크립트 엔진은 비동기 처리를 할 수 없다. 때문에 비동기로 처리되는 코드를 만날 경우 libuv 라이브러리를 이용해 비동기를 처리하게 된다. libuv는 이벤트 기반으로 비동기를 처리하는데 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다. 이것을 이벤트 리스너에 콜백 함수를 등록한다고 표현한다.
이벤트 기반 모델에서는 이벤트 루프라는 개념이 등장하고, 여러 이벤트가 동시에 발생했을 땐 이벤트 루프가 콜백 함수 호출 순서를 정한다.
즉, Node.js는 Chrom V8 엔진과 libuv library로 이루어져 있고 libuv에서 비동기를 처리한다. libuv는 이벤트 기반으로 비동기를 처리하며 여러 이벤트가 발생 했을 땐 이벤트 루프가 순서를 판단한다.
다음 JavaScript 실행이 이전 exection들에 의해 block되지 않는 것을 의미
추가 설명
Node.js 라이브러리의 모든 API는 비동기(Async)이다. Node 기반의 서버는 API가 실행되었을 때, 데이터를 반환할 때까지 기다리지 않고 다음 API를 실행한다. 즉, 이전 작업을 완료할 때까지 멈추지 않고 다음 작업을 실행한다는 의미이다. 때문에 동시에 request가 오더라도 처리가 완료될 때까지 기다리지 않아도 되서 서버 부하가 적다.
클라이언트로부터 들어오는 요청들을 단일 스레드로 받고, 내부적으로는 다중 스레드로 작업을 수행
실제로 단일 스레드로만 해결하는 것을 아니다... 구제적인건 추후 기록하도록 할 것
ES6란 ECMAScript의 6번째 버전을 의미.