노드는 Javascript의 runtime입니다. 즉, Javascript program을 실행할 수 있게 해줍니다.
인터넷 브라우저 외의 환경에서 더 빨리 실행될 수 있도록, 이런 점을 개선하기 위해 Node.js가 개발되었습니다.
다음은 Node.js의 내부 구조입니다.
노란색은 Javascript, 초록색은 C/C++로 구현되어 있습니다. Javscript 코드는 Node가 알아서 V8과 libuv에 연결해줍니다.
위 구조에 나온 이벤트 기반이 뭘까요 ?
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식입니다. 그렇기에 이벤트가 발생했을 때 무엇을 할지 미리 등록되어 있어야 합니다.
이는 이벤트 리스너(event listener)에 콜백(callback)함수를 등록함으로써 가능합니다.
Node.js application은 단일 스레드/이벤트 기반 모델로 실행됩니다. Node.js는 Background에서 thread pool을 구성해 작업을 수행하지만 application 자체에서는 단일 스레드로 실행됩니다. 요청이 처리되는 과정은 아래와 같습니다.