Node.js
❓질문
Node.js의 주요 특징에 대해 설명해주세요.
💡 조사하기전 내가 알고 있던 내용
Node.js는 크롬 V8 엔진을 기반으로하는 자바스크립트 런타임입니다. 이는 브라우저에서만 동작하던 자바스크립트를 서버 사이드 환경에서도 돌아갈 수 있게 만들어준 런타임입니다.
특징으로는 싱글 스레드 , 이벤트 루프 , 논 블로킹 I/O 이라는 특징을 예로 들 수 있을것같습니다.
먼저 node.js는 싱글 스레드를 채용하고 있습니다 하나의 스레드로 연산작업을 하고있다는뜻입니다.
일반적으로 멀티 스레드를 사용하게되면 처리해야할 일이 들어오면 새로 스레드를 만들어 일을 새로 철리하지만 node.js는 하나의 스레드만 사용하기때문에 서버 자원을 효율적으로 사용하고 있습니다.
그렇다고 일을 무조건적으로 일이 직렬로 처리되는것은 아닙니다 이는 이벤트 루프를 활용하여 비동기작업을 큐에 넣어뒀다가 다른 코드를 실행시키고 스택이 비어있다면 이벤트 루프가 이를 감지하고 큐에서 비동기작업을 가져와 호출합니다 이러한 방식으로 코드의 흐름을 차단하지않고 일이 마치 병렬적으로 처리되는것처럼 보이게합니다.
마지막으로 Node.js는 논블로킹 I/O 모델을 사용합니다.
일반적으로 I/O 작업은 완료될 때까지 실행이 멈추지만, Node.js는 작업이 끝날 때까지 기다리지 않고 다음 작업을 이어서 처리할 수 있습니다.
이는 Node.js 내부의 libuv 모듈이 I/O 작업을 대신 처리하고, 완료되면 그 결과를 이벤트 큐에 등록하여 이후 이벤트 루프를 통해 실행되기 때문입니다.