크롬 V8 엔진을 기반으로 동작하는 JS 런타임 환경
브라우저에서만 동작하던 JS를 서버 사이드 환경에서도 실행할 수 있도록 만들어 줌
싱글 스레드 기반 동작
기본적으로 하나의 스레드로 연산 작업을 수행한다는 뜻, 요청마다 JS 실행 스레드를 추가 생성하거나 할당하지 않음
일반적으로 멀티 스레드 방식은 각 요청에 대해 스레드를 따로 생성하여 병렬적으로 처리, node.js는 단일 스레드로 처리하기 때문에 서버 자원을 효율적으로 사용
이벤트 기반 구조
이는 특정 이벤트가 발생했을 때 태스트 큐에 등록된 콜백 함수를 실행하는 방식
ex- 데이터베이스 조회나 파일 읽기 같은 비동기 작업을 요청해도, 그 작업이 끝날 때까지 기다리지 않고 바로 다음 코드 실행. 이후 해당 작업 완료되면, 이벤트 루프가 해당 이벤트를 감지해 콜백 함수를 호출함
이런 방식으로 코드 흐름을 차단하지 않으면서도 필요한 작업은 차질 없이 처리할 수 있음
논 블로킹 I/O 모델 채택
일반적인 I/O 작업은 완료될 때까지 실행을 멈추는 블로킹 방식이지만, node.js는 작업이 끝날 때까지 기다리지 않고 다음 작업을 이어서 처리할 수 있음. 이처럼 I/O 작업이 애플리케이션의 흐름을 막지 않기 때문에, 많은 요청을 동시에 처리하는 데 유리, 서버 자원을 효율적으로 사용할 수 있음
이러한 비동기 I/O/방식은 앞서 설명한 이벤트 기반 구조와 결합되어 node.js의 높은 처리량과 확장성을 가능하게 만듬
CPU 계산량이 많은 작업엔 상대적으로 부적합
ex- 복잡한 이미지 변환, 머신러닝 연산, 수치 계산처럼 CPU 리소스를 많이 사용하는 작업은 싱글 스레드에서 병목이 발생할 수 있기 때문에, 이런 경우네 다른 언어나 워커 스레드 등의 대안 필요함