Node.js는 javascript를 브라우저 환경이 아닌 곳에서도 실행할 수 있도록 v8엔진을 기반으로
빌드된 자바스크립트 런타임 환경이다. Node.js에서 비동기란 병렬적 작업 처리의 대안이라고 할 수
있다. 동기적인 방식은 IO 처리를 blocking하게 되는데, 이를 비동기적으로 처리하기 위하여
여러개의 thread를 사용하여 병렬적으로 요청을 처리했었다. 동시 접속자가 많아질 수록, 요청이 많아
질 수록 thread가 많이 발생하고 그만큼의 메모리 자원도 많이 사용된다. 그러나 서버의 자원은 제한이
되어있기 때문에 일정 이상의 thread를 발생시킬 수 없습니다. Node.js에서는 IO 요청을 비동기 방식
으로 처리합니다. IO 요청이 들어오게 된다면 eventqueue에 메세지 형식으로 쌓이게 되고, eventloop
가 돌며 queuq에 쌓인 task들을 pop하여 none-blocking 방식으로 커널에 처리를 요청한다. 작업이
끝난 task를 감지한 뒤 콜백함수를 호출하는 형식으로 비동기 처리를 하게 된다. 하나의 요청 처리가 완료
되기 전에 제어권을 다음 요청으로 넘기기 때문에, IO 처리가 blocking 되지 않으며 다음 요청을 처리할
수 있습니다.