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