오늘은 Node.js에 대해서 정리해보았다.
우선 Node.js에 대해 이해하기 전에 '런타임 환경'에 대해서 이해할 필요가 있었다.
'런타임 환경'은 말 그래도 소프트웨어나 프로그램이 실행되는 동안의 환경을 의미한다. 더 나아가서는 프로그램이 메모리에 로드되고 실행되며, 자원을 관리하고, 데이터를 처리하고 결과를 반환하는 데 필요한 모든 것을 포함한다고 볼 수 있다.
런타임 환경은 다양한 소프트웨어 개발 환경에서 중요한 역할을 하는데, 예를 들어 프로그래밍 언어 런타임 환경은 언어의 실행을 지원하고, 웹 애플리케이션 환경은 웹 애플리케이션의 실행과 관련된 서버 자원 및 설정을 관리한다

Node.js는 서버 측 자바스크립트 런타임 환경이라고 할 수 있다.
이는 바꿔 말하면 Node.js는 모듈이나 라이브러리가 아니라는 것이다.
Node.js는 서버 측에서 웹 애플리케이션 및 백엔드 서비스를 개발하기 위한 도구와 라이브러리를 제공한다. Node.js는 브라우저 외의 환경에서 JavaScript 코드를 실행할 수 있도록 해주며, 파일 시스템 액세스, 네트워킹, 데이터베이스 연동 등의 기능을 제공한다.
이때문에 Node.js를 통해서 확장성이 높은 프로그램을 구현할 수 있고, 다양한 기능을 서버에 추가할 수 있다.
Node.js는 자바스크립트 기반이기 때문에 멀티 스레드가 아닌 싱글 스레드이다.
이벤트 루프는 Node.js의 핵심 부분으로, 비동기 작업의 스케줄링 및 관리를 담당한다. 루프 비동기 작업을 node.js api로 옮겨 처리하고 비동기 작업이 완료되면 task queue에 넣어져 Call Stack 내부가 비어질때까지 대기한다. 이후 call stack이 비어지면 이동하여 실행한다. 이러한 방식으로 Node.js는 단일 스레드에서도 다수의 작업을 동시에 처리할 수 있다.